123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- export function downloadApkWithJsonPost(apiUrl, requestData) {
- // 下载文件的本地存储路径
- const downloadPath = "_doc/update/";
- const apkFileName = "app.apk";
- const apkFilePath = downloadPath + apkFileName;
- // 显示下载进度
- let downloadTask;
- const progressTip = plus.nativeUI.showWaiting("准备下载更新...");
- try {
- // 确保下载目录存在
- plus.io.resolveLocalFileSystemURL(
- "_doc/",
- function (entry) {
- entry.getDirectory(
- "update",
- { create: true },
- function (dirEntry) {
- startDownload();
- },
- function (err) {
- handleError("创建下载目录失败:" + JSON.stringify(err));
- }
- );
- },
- function (err) {
- handleError("访问存储失败:" + JSON.stringify(err));
- }
- );
- } catch (e) {
- handleError("初始化下载失败:" + e.message);
- }
- function startDownload() {
- // 创建下载任务
- downloadTask = plus.downloader.createDownload(
- apiUrl,
- {
- method: "POST",
- data: JSON.stringify(requestData),
- filename: apkFilePath,
- },
- function (download, status) {
- progressTip.close();
- // 下载完成
- if (status === 200) {
- console.log("下载成功: " + download.filename);
- installApk(download.filename);
- } else {
- handleError("下载失败,状态码: " + status);
- }
- }
- );
- // 设置POST请求头
- downloadTask.setRequestHeader("Content-Type", "application/json");
- // 监听下载进度
- downloadTask.addEventListener("statechanged", function (task, status) {
- switch (task.state) {
- case 1: // 开始
- progressTip.setTitle("开始下载...");
- break;
- case 2: // 已连接到服务器
- progressTip.setTitle("已连接到服务器...");
- break;
- case 3: // 接收数据
- const progress = parseInt(
- (task.downloadedSize / task.totalSize) * 100
- );
- progressTip.setTitle(`正在下载更新包(${progress}%)...`);
- break;
- case 4: // 下载完成
- progressTip.setTitle("下载完成,准备安装...");
- break;
- }
- });
- // 启动下载
- downloadTask.start();
- }
- function handleError(message) {
- if (progressTip) {
- progressTip.close();
- }
- if (downloadTask && downloadTask.state < 4) {
- downloadTask.abort();
- }
- console.error("下载错误:", message);
- plus.nativeUI.alert(message);
- }
- }
- function installApk(filepath) {
- plus.runtime.install(
- filepath,
- {
- force: true,
- },
- function () {
- plus.nativeUI.alert("更新完成,应用即将重启", function () {
- plus.runtime.restart();
- });
- },
- function (e) {
- plus.nativeUI.alert("安装失败:" + JSON.stringify(e));
- }
- );
- }
|