设计思路:
1.版本比较:应用程序检查其当前版本与远程服务器上可用的最新版本
2. 更新状态指示:如果应用程序是不是最新的版本,则页面提示下载最新版本。
3.下载启动:通过plus.downloader.createDownload()启动新应用版本的下载,监听下载过程。
4.安装:下载成功后,用户可点击更新,应用程序通过plus.runtime.install()触发新应用版本的安装。
5应用重启:最后,应用程序使用plus.runtime.restart()重启以应用。
let configUrl = config.baseUrl
let 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",
})
}
}
//监听下载过程
downloadTask.addEventListener("statechanged", (task, status) => {
switch (task.state) {
case 1: // 开始
console.log("开始")
break
case 2: //已连接到服务器
console.log("已连接到服务器")
break
case 3: // 已接收到数据
console.log("已接收到数据 ")
let hasProgress = task.totalSize && task.totalSize > 0 //是否能获取到App大小
if (hasProgress) {
let current = parseInt(
(100 * task.downloadedSize) / task.totalSize
) //获取下载进度百分比
console.log(current)
}
break
case 4: // 下载完成
console.log("下载完成")
break
}
})
//开始执行下载
downloadTask.start()
},