123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- var server="http://192.168.1.133:28080/account/update",//获取升级描述文件服务器地址133
- //var server="http://astroway.net:28081/account/update",//获取升级描述文件服务器地址astroway
- localDir="update",localFile="update.json",//本地保存升级描述目录和文件名
- keyUpdate="updateCheck",//取消升级键名
- keyAbort="updateAbort",//忽略版本键名
- checkInterval=0,//升级检查间隔,单位为ms,7天为7*24*60*60*1000=60480000, 如果每次启动需要检查设置值为0
- dir=null;
- /**
- * 准备升级操作
- * 创建升级文件保存目录
- */
- function initUpdate(){
- // 打开doc根目录
- plus.io.requestFileSystem( plus.io.PRIVATE_DOC, function(fs){
- fs.root.getDirectory( localDir, {create:true}, function(entry){
- dir = entry;
- //进行版本判断,运行版本小于服务器版本则更新
- //checkUpdate();
- //直接更新不判断版本号的问题
- getUpdateData();
- }, function(e){
- console.log( "准备升级操作,打开update目录失败:"+e.message );
- });
- },function(e){
- console.log( "准备升级操作,打开doc目录失败:"+e.message );
- });
- }
- /**
- * 检测程序升级
- */
- function checkUpdate() {
- // 判断升级检测是否过期
- // var lastcheck = plus.storage.getItem( keyUpdate );
- // if ( lastcheck ) {
- // var dc = parseInt( lastcheck );
- // var dn = (new Date()).getTime();
- // if ( dn-dc < checkInterval ) { // 未超过上次升级检测间隔,不需要进行升级检查
- // return;
- // }
- // // 取消已过期,删除取消标记
- // plus.storage.removeItem( keyUpdate );
- // }
- // 读取本地升级文件
- dir.getFile( localFile, {create:false}, function(fentry){
- fentry.file( function(file){
- var reader = new plus.io.FileReader();
- reader.onloadend = function ( e ) {
- fentry.remove();
- var data = null;
- try{
- data=JSON.parse(e.target.result);
- }catch(e){
- console.log( "读取本地升级文件,数据格式错误!" );
- return;
- }
- checkUpdateData( data );
- }
- reader.readAsText(file);
- }, function(e){
- console.log( "读取本地升级文件,获取文件对象失败:"+e.message );
- fentry.remove();
- } );
- }, function(e){
- // 失败表示文件不存在,从服务器获取升级数据
- getUpdateData();
- });
- }
- /**
- * 检查升级数据
- */
- function checkUpdateData( j ){
- //当前客户端版本号
- var curVer=plus.runtime.version;
- //var curVer = "1.0";
- inf = j[plus.os.name];
- var srvVer = inf.version;
- //alert("当前版本:" + curVer + " 新版本 " + srvVer);
- // 判断是否需要升级
- if ( compareVersion(curVer,srvVer) ) {
- // 提示用户是否升级
- plus.ui.confirm( inf.note, function(i){
- if ( 0==i ) {
- var apk_dir = j.Android.url;
- createDownload(apk_dir);
- } else {
-
- }
- }, inf.title, ["立即更新","取 消"] );
- }
- }
-
- /**
- * 从服务器获取升级数据,并存储到本地;
- */
- function getUpdateData(){
- mui.getJSON(server,{},function (data) {
- if(true){
- // 保存到本地文件中
- dir.getFile( localFile, {create:true}, function(fentry){
- fentry.createWriter( function(writer){
- writer.onerror = function(){
- console.log( "获取升级数据,保存文件失败!" );
- };
- //从服务器下载下来JSON文件
- writer.write(data);
- //根据下载的JSON文件判断是否更新
- checkUpdateData(data);
- }, function(e){
- console.log( "获取升级数据,创建写文件对象失败:"+e.message );
- } );
- }, function(e){
- console.log( "获取升级数据,打开保存文件失败:"+e.message );
- });
- }
- });
- }
-
- /**
- * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
- * @param {String} ov
- * @param {String} nv
- * @return {Boolean}
- */
- function compareVersion( ov, nv ){
- if ( !ov || !nv || ov=="" || nv=="" ){
- return false;
- }
- var b=false,
- ova = ov.split(".",4),
- nva = nv.split(".",4);
- for ( var i=0; i<ova.length&&i<nva.length; i++ ) {
- var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);
- if ( nn>no || sn.length>so.length ) {
- return true;
- } else if ( nn<no ) {
- return false;
- }
- }
- if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {
- return true;
- }
- }
-
-
- // 创建下载任务
- function createDownload(apk_dir) {
- console.log(apk_dir);
- var dtask = plus.downloader.createDownload( apk_dir, {}, function ( d, status ) {
- // 下载完成
- if ( status == 200 ) {
- console.log( "Download success: " + d.filename );
- installApp(d.filename);
- } else {
- console.log( "Download failed: " + status );
- }
- });
- var w=plus.nativeUI.showWaiting(" 开始下载... ");
- dtask.addEventListener( "statechanged", function(task,status){
- switch(task.state) {
- case 1: // 开始
- w.setTitle(" 开始下载... ");
- break;
- case 2: // 已连接到服务器
- w.setTitle(" 开始下载... ");
- break;
- case 3:
- var a = task.downloadedSize/task.totalSize*100;
- w.setTitle(" 已下载"+parseInt(a)+"% ");
- break;
- case 4: // 下载完成
- w.close();
- break;
- }
- } );
- dtask.start();
- }
-
- //安装软件
- function installApp(install_dir){
- plus.runtime.install( install_dir, {}, function(){
- console.info("install success !");
- plus.runtime.quit();
- }, function(){
- console.info("install error !");
- });
- }
-
- //mui.plusReady(initUpdate);
|