設計思路:
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}})
?