当前位置: 首页 > news >正文

cordova手动更新

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


http://www.mrgr.cn/news/12977.html

相关文章:

  • 前端实现模块懒加载
  • 有哪些内部知识库类似钉钉,满足企业多样化需求?
  • Oracle 11g数据库与某个表的最新一笔记录进行关联
  • go国内源设置
  • 16岁激活交学费银行卡需要本人实名电话卡,线下营业厅不给办,怎么办?
  • 自动化01:认识接线端子
  • docker0: iptables: No chain/target/match by that name问题解决
  • git如何将多个提交合并为一个提交
  • Linux网络
  • Maven基本使用
  • 本地化云桌面系统环境VMware horizon搭建
  • Zotero打开后所有文献及笔记都消失了
  • Spring Boot使用拦截器(Interceptor)
  • 黑神话悟空无法登录服务器怎么办
  • 数据库系统 第28节 数据库迁移 案例分析
  • iOS 苹果健康-睡眠
  • 3D工艺大师:精准助力医疗设备远程维修
  • Redis key的过期时间和永久有效
  • 2024华为性格测试机考真题丨不会有人OD机试满分结果挂在性格测试上了吧?
  • golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法