起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6680|回复: 14

[结贴] 分享:软件版本更新自动下载安装不跳转打开浏览器

  [复制链接]

25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
发表于 2016-9-6 19:39:37 | 显示全部楼层 |阅读模式
本帖最后由 hkdwolf 于 2016-9-7 16:51 编辑

经过测试,在APP里使用fileApi、cordova.open、file-opener2 三种方式打开本地的apk包安装过程中,都会出现没到安装完成就自动退出的问题。

看来不是打开文件插件的问题,然而直接运行下载后的apk文件(同一个)安装是没问题的,为什么在APP里打开apk安装过程中没到完成就会退出?


25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
 楼主| 发表于 2016-9-7 10:53:53 | 显示全部楼层
本帖最后由 hkdwolf 于 2016-9-7 12:59 编辑

@坛主
回复

使用道具 举报

25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
 楼主| 发表于 2016-9-7 13:00:52 | 显示全部楼层
@坛主+1
回复

使用道具 举报

0

主题

1639

帖子

497

积分

中级会员

Rank: 3Rank: 3

积分
497
QQ
发表于 2016-9-7 15:01:23 | 显示全部楼层
本帖最后由 cgrddv 于 2016-9-7 15:04 编辑

I'M coming
回复我的时候请点击我当前评论旁边的回复按钮,能保证第一时间看到您的回复,在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

0

主题

1639

帖子

497

积分

中级会员

Rank: 3Rank: 3

积分
497
QQ
发表于 2016-9-7 15:39:52 | 显示全部楼层

测试中。稍等
回复我的时候请点击我当前评论旁边的回复按钮,能保证第一时间看到您的回复,在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
 楼主| 发表于 2016-9-7 16:03:49 | 显示全部楼层
本帖最后由 hkdwolf 于 2016-9-7 17:48 编辑

哈哈。。我一直以为斑猪是“liangyongfei”。。

我已经解决了,加了行代码在运行apk的时候关闭APP(原因还是没想明白):
navigator.app.exitApp();


=========分享下代码,可以实现安卓更新时不打开浏览器后台更新:=============
UI2/system/components/justep/versionchecker/versionchecker.js


define(function(require) {
        var $ = require('jquery');
        var versionInfo;
        var Browser = require('$UI/system/lib/base/browser');
        var MsgDialog = require("$UI/system/components/justep/messageDialog/messageDialog");
        var fileApi = require("$UI/system/components/justep/docCommon/fileApi");
        require("cordova!cordova-plugin-app-version");
        require("cordova!cordova-plugin-inappbrowser");
        require("cordova!cordova-plugin-x-toast");
    require("cordova!org.apache.cordova.file");
    require("cordova!org.apache.cordova.file-transfer");
    require("cordova!org.apache.cordova.file-opener2");

        var parentNode = $('body').find('.window').get(0);

        var VersionChecker = function() {
                this.env = "browser";
                if (Browser.isX5App) {
                        if (Browser.isAndroid) {
                                this.env = "androidApp";
                        }
                        if (Browser.isIOS) {
                                this.env = "iosApp";
                        }
                }
                //this.env = "androidApp";

                this.versionMsg = new MsgDialog({
                        parentNode : parentNode
                });
                var $domNode = this.versionMsg.$domNode;
                $domNode.find('.Yes').text('更新');
                $domNode.find('.No').text('忽略');
                this.versionMsg.on('onYes', function(event) {
                        //下载
                        this.download();
                }, this);
                this.versionMsg.on('onNo', function(event) {
                        //忽略
                        this.ignore();
                }, this);
                this.resourceInfo = window.__justep.versionInfo.resourceInfo;
                this.appInfo = window.__justep.versionInfo.appInfo;
        };

        VersionChecker.prototype.check = function() {
                if (this.resourceInfo) {
                        this.checkResourceVersion();
                }
                if (this.appInfo) {
                        this.checkAppVersion();
                }
        };
        
        VersionChecker.prototype.checkResourceVersion = function() {
                try {
                        if (navigator.appUtils) {
                                var versionInfo = window.__justep.versionInfo;
                                var resourceDownlaodUrl = versionInfo.resourceInfo.downloadURL;
                                var mode = versionInfo.resourceInfo.mode;
                                var isNewVersion = versionInfo.resourceInfo.isNewVersion;
                                var indexUrl = versionInfo.baseUrl + versionInfo.resourceInfo.version + versionInfo.resourceInfo.indexURL;
                                if(versionInfo.resourceInfo && versionInfo.resourceInfo.indexURL){
                                        if (mode === "1") {
                                                if (isNewVersion) {
                                                        navigator.appUtils.updateAppResource(resourceDownlaodUrl).done(function() {
                                                                navigator.appUtils.setIndexPageUrl(indexUrl);
                                                        });
                                                } else {
                                                        navigator.appUtils.setIndexPageUrl(indexUrl);
                                                }
                                        } else if (mode === "2") {
                                                navigator.appUtils.setIndexPageUrl(indexUrl);
                                                navigator.appUtils.updateAppResource(resourceDownlaodUrl);
                                        } else if (mode === "3") {
                                                navigator.appUtils.setIndexPageUrl(indexUrl);
                                        }
                                }
                        }
                } catch (updateError) {
                }
        };

        VersionChecker.prototype.checkAppVersion = function() {
                var self = this;
                if (cordova && cordova.getAppVersion) {
                        cordova.getAppVersion.getVersionNumber(function(currentVersion) {
                                if (self.appInfo[self.env] && currentVersion < self.appInfo[self.env].version && window.localStorage && localStorage.getItem('versionIgnore') !== self.appInfo[self.env].version) {
                                        self.versionMsg.show({
                                                type : "YesNoCancel",
                                                title : "版本更新",
                                                message : self.appInfo[self.env].changeLog
                                        });
                                }
                        });
                }
        };

        VersionChecker.prototype.download = function() {
               if (Browser.isAndroid && cordova.plugins.fileOpener2) {
                   this.downLoadApp();
               }else{
                   window.open(this.appInfo[this.env].downloadURL, '_system');
               }
        };

        VersionChecker.prototype.ignore = function() {
                if (window.localStorage) {
                        localStorage.setItem('versionIgnore', this.appInfo[this.env].version);
                }
        };
        

        
        VersionChecker.prototype.downLoadApp = function(event){
                justep.Util.hint("开始下载,完成将自动运行安装程序.");
                var me = this;
        //var divProgress = $(".cssprocessbar"); //获取当前行的进度条
        var filePath = 'file:///storage/emulated/0/tmp/app'+this.appInfo[this.env].version+'.apk'; //下载路径,数据库保存文件名
        var uri = encodeURI(this.appInfo[this.env].downloadURL); //下载地址
   
        var fileTransfer = new FileTransfer();
        //fileTransfer.onprogress = function(progressEvent) { //文件传输插件对象的进度方法调用
            //    var percentProgress = parseInt((progressEvent.loaded / progressEvent.total) * 100)+ "%"; //获取已下载和总大小的百分比
            //    if (progressEvent.lengthComputable)//获取浏览器返回HEAD信息包含CONTENT-LENGTH为TRUE 则执行下面
            //   {        
            //            divProgress.css("width",percentProgress); //设置进度条的样式
            //            divProgress.html(percentProgress);        //设置进度条里面的数字
            //    }
        //};
               
        fileTransfer.download( //调用对象的下载方法,开始下载
            uri,
            filePath,
            function(entry) {
                console.log("download complete: " + entry.fullPath);
                me.openFile();
            },
            function(error) {  //出错回调函数
                console.log("download error source " + error.source);
                console.log("download error target " + error.target);
                console.log("upload error code" + error.code);
            },
            false,
            {
                headers: {
                }
            }
        );        
    };
   
    VersionChecker.prototype.openFile = function(event){
            var url = require.toUrl('file:///storage/emulated/0/tmp/app'+this.appInfo[this.env].version+'.apk');
            cordova.plugins.fileOpener2.open(url, "application/vnd.android.package-archive", {
                        error : function() {
                                justep.Util.hint("打开应用失败!");
                        },
                        success : function() {
                                justep.Util.hint("下载成功,即将关闭APP进行更新!");
                                navigator.app.exitApp();
                        }
                });
    };



        return new VersionChecker();
});
回复 支持 反对

使用道具 举报

0

主题

1639

帖子

497

积分

中级会员

Rank: 3Rank: 3

积分
497
QQ
发表于 2016-9-7 16:07:03 | 显示全部楼层
hkdwolf 发表于 2016-9-7 16:03
哈哈。。我一直以为斑猪是“liangyongfei”。。

我已经解决了,加了行代码在运行apk的时候关闭APP(原因 ...

我默默的喝了口水。。。
回复我的时候请点击我当前评论旁边的回复按钮,能保证第一时间看到您的回复,在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
 楼主| 发表于 2016-9-7 16:14:16 | 显示全部楼层
本帖最后由 hkdwolf 于 2016-9-7 16:16 编辑
cgrddv 发表于 2016-9-7 16:07
我默默的喝了口水。。。

遇到个新问题:
安装成功了,显示完成和打开。

点打开的时候没打得开。。。


说起来还得怪X5,WEX5现在各种好评,我们都觉得很不错,可是版本更新功能居然还跳浏览器窗口。。太LOW啦,把X5高大上形象都影响了。。不然也不用自己写。。

回复 支持 反对

使用道具 举报

25

主题

79

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
QQ
 楼主| 发表于 2016-9-7 16:20:47 | 显示全部楼层
hkdwolf 发表于 2016-9-7 16:14
遇到个新问题:
安装成功了,显示完成和打开。

这个问题也解决了(原因不告诉你)。。

现在已经完美实现了版本更新的自动下载、提示安装全过程。

可以结贴了。
回复 支持 反对

使用道具 举报

16

主题

61

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
QQ
发表于 2017-8-10 23:49:02 | 显示全部楼层
hkdwolf 发表于 2016-9-7 16:20
这个问题也解决了(原因不告诉你)。。

现在已经完美实现了版本更新的自动下载、提示安装全过程。

您好!
替换了versionChecker.js,但是编译后的www里面并没有这个,提示更新的时候还是跳转到浏览器,请问前辈是怎么处理的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-20 08:30 , Processed in 0.082517 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表