ionic app 安卓版自动更新
来源:互联网 发布:巴宝莉女士香水知乎 编辑:程序博客网 时间:2024/04/28 09:10
准备工作
ngcordova 插件:
- 文件管理插件:cordova plugin add cordova-plugin-file
- 文件传输插件:cordova plugin add cordova-plugin-file-transfer
- 文件打开插件:cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2.git
- app版本获取插件:cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git
获取服务器上的版本号
得到服务器上的apk的versionCode后,使用$cordovaAppVersion获取当前运行的apk的versionCode后,将两者进行比较。
$http.get(url) .then(function (success) { var data = success.data; var serverCode = data.versionCode; $cordovaAppVersion.getVersionCode() .then(function (version) { // 返回服务器上的versionCode与本地versionCode是否一致 deferred.resolve(version != serverCode); }, false) }, function (error) { deferred.reject(error); });
下载apk,并更新安装
提示是否更新
var confirmPopup = $ionicPopup.confirm({ title: '<strong>提示</strong>', template: '发现新版本,是否更新?', okText: '确认', cancelText: '取消' }); confirmPopup .then(function (res) { if (res) { Download.updateAPK(); } }); }
文件下载服务,我的安卓项目的包路径中包含了数字,不知道是不是因为这个原因,将apk下载到 cordova.file.dataDirectory下,一运行就报:”解析软件包时出现问题”,后面,将apk下载至其他目录成功升级。
.factory('Download', [ '$cordovaFile', '$cordovaFileTransfer', '$cordovaFileOpener2', '$q', 'Util', '$timeout', 'Android_MIME_MapTable', 'SystemConstant', '$ionicLoading', function ($cordovaFile, $cordovaFileTransfer, $cordovaFileOpener2, $q, Util, $timeout, Android_MIME_MapTable, SystemConstant, $ionicLoading) { // 下载目录 var downloadPath; return { /** * 初始化app的下载目录 */ initDownloadDirectory: function () { /** * cordova.file.dataDirectory 不同平台对应位置如下 * android:'data/data/<app-id>/files/' * IOS:'/var/mobile/Applications/<UUID>/Library/NoCloud/' */ /** * 因android平台,apk类型的文件放到cordova.file.dataDirectory下,将无法正常安装 * 因此,针对不同平台,使用不同的下载目录 */ if (ionic.Platform.isAndroid()) { // 初始化android平台的下载目录 downloadPath = cordova.file.externalRootDirectory + ''app_download_path''; this.createDir(cordova.file.externalRootDirectory, 'app_download_path') .then(function (success) { downloadPath = success.nativeURL; }, false); } else { // 初始化IOS平台的下载目录 downloadPath = cordova.file.dataDirectory + 'app_download_path'; this.createDir(cordova.file.dataDirectory, 'app_download_path') .then(function (success) { downloadPath = success.nativeURL; }, false); } }, /** * 创建目录 * @param path 目录 * @param directory 目录名称 */ createDir: function (path, directory) { var deferred = $q.defer(); $cordovaFile.createDir(path, directory, false) .then(function (success) { deferred.resolve(success); console.log("目录创建成功!" + angular.toJson(success)); }, function (error) { deferred.reject(error); console.log("目录创建失败!" + angular.toJson(error)); }); return deferred.promise; }, /** * 文件下载 * @param url 资源定位 * @param targetPath 文件存储位置 * @returns {Promise} */ download: function (url, targetPath) { var deferred = $q.defer(); // 允许所有安全证书 var trustAllHosts = true; // 选项 var options = {}; $ionicLoading.show({template: "已经下载0%"}); $cordovaFileTransfer.download(url, targetPath, options, trustAllHosts) .then(function (success) { $ionicLoading.hide(); deferred.resolve(success); }, function (error) { deferred.reject(error); }, function (progress) { $timeout(function () { var downloadProgress = (progress.loaded / progress.total) * 100; $ionicLoading.show({template: "已经下载" + Math.floor(downloadProgress) + "%"}); if (downloadProgress > 99) { $ionicLoading.hide(); } }); }); return deferred.promise; }, /** * 更新apk */ updateAPK: function () { var deferred = $q.defer(); var url = "http://yourServceAddress/your.apk"; var targetPath = downloadPath + "/" + 'your.apk'; this.download(url, targetPath) .then(function () { // 使用插件打开apk文件 $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive') .then(function (success) { console.log(angular.toJson(success)); deferred.resolve(success); }, function (error) { console.log(angular.toJson(error)); deferred.reject(error); }); }, function (error) { deferred.reject(error); }); } } }])
0 0
- ionic app 安卓版自动更新
- ionic 自动更新APP
- IONIC 自动更新APP版本
- IONIC 自动更新APP版本
- IONIC 自动更新APP版本
- 关于ionic 开发自动更新app的实现
- APP自动更新
- android app 自动更新
- Sencha Touch App 自动更新
- iOS app自动更新
- Android自动更新App
- app内部自动更新
- APP自动更新技术方案
- Retrofit2实现App自动更新
- android app 自动更新库
- Retrofit2实现App自动更新
- android app自动更新
- Android实现APP自动更新
- 人体时钟hone hone clock
- Mac上启动nginx报错:nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
- ContextMenu上下文菜单
- JNative:JAVA调用DLL
- 通过多播实现局域网上线用户列表 c++实现
- ionic app 安卓版自动更新
- 关于继承的Activity中初始化及生命周期被调用的顺序
- C#—实验9.1、9.2、9.3和9.4
- Cordova各个插件使用介绍系列(一)—$cordovaSms发送短信
- Java内部类总结
- iOS -- retain,copy,assign及autorelease ,strong,weak
- Linphone之Mediastreamer2分析
- creat 与open 系统调用
- java字段与数据库字段映射