1:依赖
cordova-plugin-file
cordova-plugin-file-transfer
cordova-plugin-file-opener2
第二个参数:application/vnd.android.package-archive来源
cordova plugin add cordova-plugin-app-version//获取cordova版本号
cordova plugin add cordova-plugin-file//获取程序相关目录
cordova plugin add cordova-plugin-file-transfer//操作文件上传/下载
cordova plugin add cordova-plugin-file-opener2//打开本地文件
2:代码实现
思路实现:
1:首先使用cordova.getAppVersion.getVersionNumber()这个方法获取到cordova版本号
2:请求接口获取到最新的版本号信息(也可以请求txt等文件,只要能获取到版本就可以了)
3:对比版本号差异,如果版本一致则不变
4:获取到apk下载地址
5:获取到cordova对象,赋值好:apk下载地址,apk打开地址(直接启动apk而不需要用户操作)
6:实列化FileTransfer (操作文件上传/下载)
7:使用FileTransfer 的download方法开始下载文件
8:使用FileTransfer 的onprogress方法监听下载进度(下载完成会自动打开,这里是为了告诉用户下载进度)
9:cordova.plugins.fileOpener2.open打开下载地址
/**选中项的信息 */
let system: any = localStorage.getItem("system");
function onDeviceReady() {cordova.getAppVersion.getVersionNumber().then(function (version: any) {console.log(version, "当前版本");versIon.value = version;system = JSON.parse(system);/*** 从服务器获取应用的版本信息,和本地应用版本对比*/let uel = system.address + "xxx";axios.post(uel,{orgid: system.organization,mactype: "evaluator",systemname: store.systemname,},{headers: {Authorization: system.token,},}).then((res: any) => {console.log(res.data);if (res.data.code === 200) {if (res.data.data.version > version) {// 更新versions.value.filesPath = `apk下载地址`;}}}).catch((err: any) => {console.log(err, "版本接口请求失败");});// 监听网络状况,无网络时document.addEventListener("offline",function () {console.log("网络异常,不能连接到服务器!");},false);});
}
/** 检测新版本升级*/
function upgradeForAndroid(ApkUrl: any) {schedule.value = "0";//从window中获取Cordova对象var cordova = window.cordova;var url = system.address + ApkUrl;//apk下载地址var saveUrl = cordova.file.externalDataDirectory + "/app-debug.apk"; //要下载的目标路径及文件名(本地存储路径)var fileTransfer = new FileTransfer();// 开始下载并打开fileTransfer.download(url,saveUrl,function (entry: any) {console.log("download complete: " + entry.toURL());let url = entry.toURL();cordova.plugins.fileOpener2.open(url,"application/vnd.android.package-archive",{error: function (e: any) {console.log("open fail", e);},success: function (e: any) {console.log("open successfully", e);},});},function (error: any) {console.log("download error source " + error.source);console.log("download error target " + error.target);console.log("download error code" + error.code);});// 监听下载获取进度条fileTransfer.onprogress = function (progressEvent: any) {console.log(progressEvent, "下载进度");if (progressEvent.lengthComputable) {var downloadProgress =(progressEvent.loaded / progressEvent.total) * 100;schedule.value = Math.floor(downloadProgress) + "";console.log(schedule.value, "已经下载");if (Math.floor(downloadProgress) == 100) {schedule.value = "-1";centerDialogVisible.value = false;} else {console.log("下载完成后会自动弹出安装");}}};
}
3:执行顺序
1:监听 deviceready 事件执行完毕 (这个事件是cordova专属的监听跟android交互加载的)
document.addEventListener("deviceready", onDeviceReady, false);
2:执行onDeviceReady事件对比版本
3:弹窗提示用户是否更新
4:点击更新按钮执行 upgradeForAndroid 事件
参考文章:看了很多文章但是没有很好的实现最后参考这个文章加上项目需求实现了
https://juejin.cn/post/6844904138388537351?from=search-suggest