安卓手机版本自检更新思路,现在后台定义一个版本参数,每次打开app的时候进行版本参数获取,并且跟本地的版本参数进行比较,如果本地的版本参数小于或不等于后台定义的版本,那么就会提醒更新版本,然后从放在后台服务器的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连接状态
if(plus.networkinfo.getCurrentType()!=3){
uni.showToast({
title: '有新的版本发布,检测到您目前非Wifi连接,为节约您的流量,程序已停止自动更新,将在您连接WIFI之后重新检测更新',
mask: true,
duration: 5000,
icon:"none"
});
return;
}else{
uni.showModal({
title: "版本更新",
content: `有新的版本发布,检测到您当前为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: '有新的版本发布,检测到您目前为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
});
}
});
//监听下载
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();
}