安卓手機版本自檢更新思路,現(xiàn)在后臺定義一個版本參數(shù),每次打開app的時候進行版本參數(shù)獲取,并且跟本地的版本參數(shù)進行比較,如果本地的版本參數(shù)小于或不等于后臺定義的版本,那么就會提醒更新版本,然后從放在后臺服務器的apk進行下載安裝。
檢查版本,提醒用戶是否更新版本,這里的plus是html5+的api
var server_version = store.state.appversion
export async function AndroidCheckUpdate(){
try{
let version = await api('v2/cms/QueryConfigs',{
data:{
'type':'sys',
'key':'cthrVersion'
}
})
console.log('version',version)
server_version = version[0].value
let curr_version = store.state.appversion
checkVersionToLoadUpdate(server_version,curr_version)
}catch(e){
console.log(e)
}
}
function checkVersionToLoadUpdate(server_version,curr_version){
console.log(server_version+'---'+curr_version,server_version !== curr_version);
if(server_version !== curr_version){
//TODO 此處判斷是否為 WIFI連接狀態(tài)
if(plus.networkinfo.getCurrentType()!=3){
uni.showToast({
title: '有新的版本發(fā)布,檢測到您目前非Wifi連接,為節(jié)約您的流量,程序已停止自動更新,將在您連接WIFI之后重新檢測更新',
mask: true,
duration: 5000,
icon:"none"
});
return;
}else{
uni.showModal({
title: "版本更新",
content: `有新的版本發(fā)布,檢測到您當前為Wifi連接,是否立即進行新版本下載?當前下載版本為${server_version}`,
confirmText:'立即更新',
cancelText:'稍后進行',
success: function (res) {
if (res.confirm) {
uni.reLaunch({
url:'/pages/auth/updatePage/updatePage'
})
} else if (res.cancel) {
console.log('稍后更新');
}
}
});
}
}
}
進入下載頁進行apk包下載,這里下載完成之后會自動拉起安裝框進行文件安裝。
var totalSize = 0
var nowbaifen = 0
export function uniDownload(){
uni.showToast({
icon:"none",
mask: true,
title: '有新的版本發(fā)布,檢測到您目前為Wifi連接,程序已啟動自動更新。新版本下載完成后將自動彈出安裝程序',
duration: 5000,
});
//設置 最新版本apk的下載鏈接
var downloadApkUrl = '最新版本apk的下載鏈接';
var dtask = plus.downloader.createDownload( downloadApkUrl, {}, function ( d, status ) {
// 下載完成
if ( status == 200 ) {
plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename),{},{},function(error){
uni.showToast({
title: '安裝失敗',
duration: 1500
});
})
} else {
uni.showToast({
title: '更新失敗',
duration: 1500
});
}
});
//監(jiān)聽下載
dtask.addEventListener("statechanged", function (download, status) {
switch (download.state) {
case 2:
// plus.nativeUI.showWaiting("正在下載...");
break;
case 3:
//進度條百分比 totalSize為總量,baifen為當前下載的百分比
if(totalSize==0){
totalSize=parseInt(download.totalSize);
}
if(parseInt(download.downloadedSize/totalSize*100)!=nowbaifen){
nowbaifen=parseInt(download.downloadedSize/totalSize*100);
store.state.baifen = nowbaifen
// store.commit('getBaifen',nowbaifen)
console.log('baifen',store.state.baifen)
}
break;
case 4:
uni.showToast({
title: '下載完成',
duration: 1500
});
// plus.nativeUI.closeWaiting();
break;
}
});
dtask.start();
}