Cordova app 检查更新 ----JS进行调用(二)
原文:Cordova app 检查更新 ----JS进行调用(二)
1.获取版本号 需要添加 插件
cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git
js 进行调用:
// 获取当前移动设备已经安装的版本
cordova.getAppVersion.getVersionNumber().then(function (version) {
var versionCode = parseInt(version.toString().replace(/\./g,''));
console.log(versionCode);
// 1.获取当前版本号
// 2.获取服务器端的最新版本的数据源
// 3.进行版本比较,如果当前的版本号与服务器的版本号不一致时,下载并安装最新的应用程序安装包
Common.alert("温馨提示", "有新版本可供更新.\n 1.界面美化 \n 2.性能优化\n 3.最新版本:"+versionCode); });
2. 使用ajax进行获取服务中最新的安装包的详细信息
3.比较版本号是否一致,如果不一致,将会提示是否进行“更新”
4.如果选择"更新",对执行安装包的下载
var url = "http://ftp-apk.pconline.com.cn/5014afca744eddb3fc7fe2d25d60aa29/pub/download/201010/HiMarket.apk?crazycache=1"; //可以从服务端获取更新APP的路径
var targetPath = "HiMarket.apk"; //APP下载存放的路径,可以使用cordova file插件进行相关配置
var trustHosts = true;
var options = {};
var ft = new FileTransfer();
ft.download(url, targetPath, successCallback, fileTransfer.downloadFailed, trustHosts, options);
5.将打开下载后的安装包
Android 平台下打开安装包文件的方式与iOS的方式不一样
Android使用本地路径进行打开
iOS需要进行跳转到app store 中进行下载更新
此时需要将FileOpener2.h中定义的方法添加到plugins.FileOpener2.js (iOS项目中的cordova-plugin-file-opener2目录下的www目录中)
cordova.define("cordova-plugin-file-opener2.FileOpener2", function(require, exports, module) {
/*jslint browser: true, devel: true, node: true, sloppy: true, plusplus: true*/
/*global require, cordova */ var exec = require('cordova/exec'); function FileOpener2() {} FileOpener2.prototype.openURL = function (url, callbackContext) {
callbackContext = callbackContext || {};
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'openURL', [url]);
}; FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
callbackContext = callbackContext || {};
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
}; FileOpener2.prototype.uninstall = function (packageId, callbackContext) {
callbackContext = callbackContext || {};
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'uninstall', [packageId]);
}; FileOpener2.prototype.appIsInstalled = function (packageId, callbackContext) {
callbackContext = callbackContext || {};
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'appIsInstalled', [packageId]);
}; module.exports = new FileOpener2();
});
6.将这两种文件的打开方式进行封装成FileOpen.js
/**
* 使用方法:
* fileOpener.open(url).then(function(){});
* 用到的原生api 有:cordova-plugin-dialogs,cordova-plugin-device,cordova-plugin-FileTransfer
*/ /**FileTransfer*/
var ft;
Ext.define("util.FileOpen", {
alternateClassName: "fileOpener",
singleton: true,
config: {
isComplete: false,
description: '高视医疗信息'
},
constructor: function (config) { this.initConfig(config);
},
// Returns a jQuery or AngularJS deferred object, or pass a success and fail callbacks if you don't want to use jQuery or AngularJS
getPromisedExec: function (command, success, fail) {
var toReturn, deferred, injector, $q;
if (success === undefined) {
if (window.jQuery) {
deferred = jQuery.Deferred();
success = deferred.resolve;
fail = deferred.reject;
toReturn = deferred;
} else if (window.angular) {
injector = angular.injector(["ng"]);
$q = injector.get("$q");
deferred = $q.defer();
success = deferred.resolve;
fail = deferred.reject;
toReturn = deferred.promise;
} else if (window.Promise) {
toReturn = new Promise(function (c, e) {
success = c;
fail = e;
});
} else if (window.WinJS && window.WinJS.Promise) {
toReturn = new WinJS.Promise(function (c, e) {
success = c;
fail = e;
});
} else {
return console.error('AppVersion either needs a success callback, or jQuery/AngularJS/Promise/WinJS.Promise defined for using promises');
}
} if (device.platform == "Android") { cordova.plugins.fileOpener2.open(command, 'application/vnd.android.package-archive', success, fail);
}
else if (device.platform == "iOS") {
// 加载其他应用,应用在升级的时候,iOS使用openURL打开、Android使用open打开 'tel://10086'
cordova.plugins.fileOpener2.openURL(command, {
success: success,
error: fail
});
} return toReturn;
},
open: function (filePath, success, fail) {
return this.getPromisedExec(filePath, success, fail);
}
});
使用方法:
1.比较版本号
cordova.getAppVersion.getVersionNumber().then(function (version) {
var versionCode = parseInt(version.toString().replace(/\./g,''));
// 此处写比较版本号逻辑,需要获取服务器上应用程序的最新版本号 });
2.下载安装包,并执行安装
Progress.start("正在下载,请稍后...");
// 下载安装包
fileTransfer.download(function(entry){ Progress.close(); // 打开已经下载的安装包
fileOpener.open(entry.fullPath).then(function(message){
console.log(message);
},function(message){
console.log(message);
}); console.log('download complete: ' + entry.fullPath);
console.log('download name: ' + entry.name); });
Cordova app 检查更新 ----JS进行调用(二)的更多相关文章
- Cordova app 检查更新 ----创建项目、添加插件、修改插件(一)
原文:Cordova app 检查更新 ----创建项目.添加插件.修改插件(一) 使用Cordova 进行跨平台应用程序的开发 1.创建Cordova项目 $ cordova create hell ...
- cordova APP 检查更新
原文:cordova APP 检查更新 //升级程序 .factory('UpdateService', function ($rootScope, $cordovaAppVersion, $cord ...
- Cordova CLI源码分析(二)——package.json
每个包需要在其顶层目录下包含一个package.json文件,该文件不仅是包的说明,也影响npm安装包时的配置选项 更多参数详见参考文档https://npmjs.org/doc/json.html ...
- 小程序公用js提取到app.js中调用的实例
index.wxml: <view "> <text>{{page}}</text> </view> <view "> ...
- [Phonegap+Sencha Touch] 移动开发76 让cordova app訪问远端站点也能调用cordova插件功能
原文链接:http://blog.csdn.net/lovelyelfpop/article/details/50735395 我相信.应该会有一些cordova开发人员想过实现以下这种app: 使用 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...
- iOS(UIWebView 和WKWebView)OC与JS交互 之二
在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...
- Android-webview和js互相调用
Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的 ...
随机推荐
- Qt的一些开发技巧
Lambda匿名函数 有时候槽函数代码辑逻辑非常简单,可以直接用下面的Lambda匿名函数处理信号,简捷明了.需c++11支持,不支持自身递归调用. 1 2 3 4 5 6 7 QComboBox * ...
- 【例题 6-7 UVA - 122 】Trees on the level
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二叉树的话,直接用数组存就好了. 写个bfs记录一下答案. [代码] #include <bits/stdc++.h> ...
- [PReact] Integrate Redux with Preact
Redux is one of the most popular state-management libraries and although not specific to React, it i ...
- Spring配置文件头及xsd文件版本
最初Spring配置文件的头部声明如下: Xml代码 <?xml version="1.0" encoding="UTF-8"?> <!D ...
- PDFObject.js、jquerymedia.js、pdf.js的对比
由于在做手机项目中需要用到预览pdf文件的需求,一搜还真多,试用后发现兼容性不是很好,大多需要浏览器对pdf阅读的支持: 如果你只是想不依赖浏览器本身对pdf解析的情况下,在手机展示pdf文件,就需要 ...
- 22、DMA驱动程序框架
一.使用DMA的优点及DMA支持的请求源(请求源是启动DMA传输的事件,可以认为是触发.它可以是软件,也可以是中断,或者外部事件) 1.DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CP ...
- 【hdu5527】【2015ACM/ICPC亚洲区长春站 】Too Rich
题目链接: pid=5527">http://acm.hdu.edu.cn/showproblem.php?pid=5527 题意&题解: 感觉自己真是弱啊,自己想的贪心是错的 ...
- angular风格指南
原文 https://www.jianshu.com/p/1a0a0a74769a 大纲 综述 1.单一职责 2.命名 3.LIFT-D应用程序结构 4.组件 综述 以下说的准则是根据angular官 ...
- Python数据分析环境和工具
一.数据分析工作环境 Anaconda: Anaconda(水蟒)是一个科学计算软件发行版,集成了大量常用扩展包的环境,包含了 Python 解释器,conda 包管理工具,以及 NumPy.Pand ...
- 二次封装CoreData
(1)创建一个Data Model文件.命名为MyModel.xcdatamodeld (2)创建Users表,加入如图的字段 (3)创建NSManagedObject subclass表实体文件 ( ...