首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android检测版本并实现自动更新

Android检测版本并实现自动更新

原创
作者头像
安德玛
发布2022-03-05 14:03:31
发布2022-03-05 14:03:31
1.5K00
代码可运行
举报
文章被收录于专栏:Cordova封装H5 APPCordova封装H5 APP
运行总次数:0
代码可运行

逻辑:

利用cordova组件检测到当前app的版本

cordova检测版本是根据config.xml配置文件中的

version来检测的

请求接口获取服务端配置的最新版的app版本

比较二者的大小,若本地app版本小于服务器版本

则调用cordova插件去下载服务器地址上的apk文件

下载完成后安装即可

分步代码

安装cordova插件

代码语言:javascript
代码运行次数:0
运行
复制
//获取app版本号
cordova plugin add cordova-plugin-app-version 
//提供一个临时存储文件的地方
cordova plugin add cordova-plugin-file
//实现上传下载
cordova plugin add cordova-plugin-file-transfer
//下载后打开
cordova plugin add cordova-plugin-file-opener2
首页写getNativeVersion方法:
getNativeVersion() {
	window.cordova.getAppVersion.getVersionNumber().then(function(version) {
		localStorage.setItem("version", version);
		checkUpgrade(version);
	});
},
checkUpgrade方法:
  /*
   * 检测升级方法
   */
  export function checkUpgrade(locationVersion) {
      /**
      * 从服务器获取应用的版本信息,和本地应用版本对比
      */
      getAppVersion({
	     method: "post"
	   }).then(response => {
          if(response != null){
	      console.log(response.data)
              var serverVersion = response.data.appVersion;
              var locationVersionNum = parseInt(locationVersion.replace(/\./g,""))
              var serverVersionNum = parseInt(serverVersion.replace(/\./g,""))
              if(locationVersionNum < serverVersionNum){
                  Dialog.confirm({
                      title: '发现版本: ' + serverVersion + ',请进行升级',
                      message: '建议您在WIFI环境下升级',
                  }).then(() => {
                      // on confirm
                      upgradeForAndroid()
                  }).catch(() => {
                      // on cancel
                      navigator.app.exitApp();
                  });
              }
          }
      })
      // 监听网络状况,无网络时
      document.addEventListener('offline', function () {
          alert("网络异常,不能连接到服务器!");
          Dialog.alert({
              title:"网络异常,不能连接到服务器!",
              message:"请在连接网络的情况下升级应用"
          }).then(() => {
              navigator.app.exitApp();
          })
      }, false);
  }
upgradeForAndroid方法:
 // 检测新版本升级
  export function upgradeForAndroid(releasePath, packageName) {
      //从window中获取Cordova对象
  var cordova = window.cordova
  //apk所在的服务器路径(下载路径)
      var url = "http://oa.szwzkeji.com/Public/Download/biggift.apk"; 
      var targetPath = cordova.file.externalDataDirectory + "biggift.apk"; //要下载的目标路径及文件名(本地存储路径)
      var trustHosts = true;
      var options = {};
      // alert("url:" + url);
      // alert("targetPah:" + targetPath);
      // alert("trustHost:" + trustHosts);
      downLoadApp();
      function downLoadApp() {
          // 初始化FileTransfer对象
          // eslint-disable-next-line no-undef
          var fileTransfer = new FileTransfer();
          fileTransfer.onprogress = function (progressEvent) {
              if (progressEvent.lengthComputable) {
                  var downloadProgress = (progressEvent.loaded / progressEvent.total) * 100;
                  var result = "已下载:" + Math.floor(downloadProgress) + "%";
                  
                  if(Math.floor(downloadProgress) == 100){
                      Dialog.alert({
                          title: result,
                          message:"下载完成后会自动弹出安装",
                          showConfirmButton:false,
                          showCancelButton:true
                      }).then(
                      ).catch(() => {
                          // on cancel
                          navigator.app.exitApp();
                      })
                  }else{
                      Dialog.alert({
                          title: result,
                          message:"下载完成后会自动弹出安装",
                          showConfirmButton:false,
                          showCancelButton:false
                      })
                  }
              }
          };
          // 调用download方法
          fileTransfer.download(
              url, //uri网络下载路径
              targetPath, //url本地存储路径
              function (entry) {
				  // alert("开始执行downLoadApp",entry);
				  // alert(targetPath);
      //             alert("download complete: " + entry.toURL());
                  cordova.plugins.fileOpener2.open(
                      targetPath,
                      'application/vnd.android.package-archive',
                      {
                          error: function (e) {
                              alert('Error status: ' + e.status + ' - Error message: ' + e.message);
                              Dialog.alert({
                                  title: "打开下载文件失败",
                                  message:"请退出后重新进入应用",
                              }).then(res => {
                                  navigator.app.exitApp();
                              })
                          },
                          success: function () {
                              // console.log('open successfully');
							  // alert('open successfully');
                          }
                      })
              },
              function (error) {
                  // AlertModule.show({ title: "下载失败" })
                  alert("download error source " + error.source);
                  alert("download error target " + error.target);
                  alert("upload error code" + error.code);
              }
          );
      }
  }

总结:

主要都是用cordova插件实现的,所以很重要的就是那几个插件的引入

自己的js逻辑代码可以封装在utils工具js类中方便调用

每次新版本重新签名打包的时候一定要记得手动修改config.xml配置最新的apk版本上传服务器并手动修改服务器的版本号

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档