设计思路:
1.版本比较:应用程序检查其当前版本与远程服务器上可用的最新版本
2. 更新状态指示:如果应用程序是不是最新的版本,则页面提示下载最新版本。
3.下载启动:通过plus.downloader.createDownload()启动新应用版本的下载,监听下载过程。
4.安装:下载成功后,用户可点击更新,应用程序通过plus.runtime.install()触发新应用版本的安装。
5应用重启:最后,应用程序使用plus.runtime.restart()重启以应用。
let configUrl = config.baseUrllet baseUrl = configUrl.toString().split(':')let appUrl = baseUrl[0] + ':' + baseUrl[1] + ":8888/statics/his-app.apk"let downloadTask = plus.downloader.createDownload(appUrl,{method: "GET",},(task, status) => {console.log(status, "status")if (status == 200) {//下载成功uni.showModal({title: '',content: '下载成功,确定现在更新吗?',confirmText: '更新',confirmColor: '#EE8F57',success: function (res) {if (res.confirm) {console.log("更新")plus.runtime.install(task.tempFilePath,{force: true,},function () {// 安装成功,可以重启应用plus.runtime.restart()},function (e) {uni.showModal({title: '更新失败',content: '更新失败',showCancel: false})plus.nativeUI.closeWaiting()// 安装失败,处理错误})}},complete: () => {// uni.hideLoading();}})} else {uni.showToast({title: "下载失败",icon: "error",})}}).start();
//监听下载过程downloadTask.addEventListener("statechanged", (task, status) => {switch (task.state) {case 1: // 开始console.log("开始")breakcase 2: //已连接到服务器console.log("已连接到服务器")breakcase 3: // 已接收到数据console.log("已接收到数据 ")let hasProgress = task.totalSize && task.totalSize > 0 //是否能获取到App大小if (hasProgress) {let current = parseInt((100 * task.downloadedSize) / task.totalSize) //获取下载进度百分比console.log(current)}breakcase 4: // 下载完成console.log("下载完成")break}})