ionic2检测下载更新代码及进度百分比显示问题

本文介绍了一个Ionic2项目的在线更新实现方法,详细讲解了iOS通过跳转至App Store进行更新的过程,以及Android平台上如何利用Cordova插件实现新版本检测、下载及安装的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ionic2项目需要实力在线更新功能,ios比较简单,跳转到app store的链接地址了


android就需要花一些气力了,上代码



需要先安装一些插件

cordova-plugin-file,
cordova.plugins.fileOpener2,
cordova-plugin-file-transfer

appHttp这个自已封装的http请求对象,做拦截用的,可忽略,不在这次说明的内容内
appConfig是自已封装的全局参数对象,主要放平台,版本,服务端请求地址等,可忽略

//检查更新新版本
checkVersion(){
    this.appHttp.get("http://url").then(data=>{
        if(data.code=='0'){
            this.alertCtrl.create({
                message: '<b>'+data.message+'</b>',
                buttons: [{
                    text: '残忍放弃',
                    role: 'cancel'
                },{
                    text: '立即下载',
                    handler: () => {
                        this.updateNewApp(data);
                    }
                }
                ]
            }).present();
        }else{
            this.loadingCtrl.create({spinner: 'hide',content:'已经是最新版本!',duration:2000}).present();
        }
    }).catch(data=>{
        this.loadingCtrl.create({spinner: 'hide',content:'检查版本时发生网络异常,请稍后再试!',duration:2000}).present();
    })
}

updateNewApp = function(data){
    if(this.appConfig.platform == 'ios'){
        window.open(data.result);
    }else {
        let cordova = (<any>window).cordova;
        if ((<any>window).FileTransfer) {
            let fileTransfer = new (<any>window).FileTransfer();
            let fileURL = cordova.file.externalDataDirectory + "android.apk";

            if (!cordova.file.externalDataDirectory) {
                this.loadingCtrl.create({spinner: 'hide', content: '无法安装,请尝试从应用市场安装更新!', duration: 2000}).present();
                return;
            }
            let loading = this.loadingCtrl.create({
                content: '下载进度:0%',
                dismissOnPageChange: false
            });
            loading.present();

            let no:number = 1;
            fileTransfer.onprogress = function (progressEvent) {
                if (progressEvent.lengthComputable) {
                    no = progressEvent.loaded / progressEvent.total * 100;
                }
            };

            let timer = setInterval(() => {
                loading.setContent("下载进度:" + Math.floor(no) + "%");
                if (no >= 99) {
                    clearInterval(timer);
                }
            }, 300);

            fileTransfer.download(encodeURI(data.result), fileURL, function (r) {
                if(timer)clearInterval(timer);
                loading.dismiss();
                cordova.plugins.fileOpener2.open(r.toURL(), "application/vnd.android.package-archive");
            }, function () {
                if(timer)clearInterval(timer);
                loading.dismiss();
                this.loadingCtrl.create({spinner: 'hide',content: '出错了,请尝试从应用市场安装更新!', duration: 2000}).present();
            });
        }
    }
}
关键代码在这里:
let no:number = 1;
            fileTransfer.onprogress = function (progressEvent) {
                if (progressEvent.lengthComputable) {
                    no = progressEvent.loaded / progressEvent.total * 100;
                }
            };

            let timer = setInterval(() => {
                loading.setContent("下载进度:" + Math.floor(no) + "%");
                if (no >= 99) {
                    clearInterval(timer);
                }
            }, 300);
后面那个定时器里的代码理论上可以写到上面,但那样百分比分一直不动,达不到效果
我的认为是js阻塞了线程,前端内容无法宣染,加了定时器后效果不错


首先我在这里我需要编译一些代码实现一些功能,在此之前由于这输出结果是会作为科研小论文的图示,所以我先交代一下科研背景。我的体系是湿法磷酸体系,其中具备磷酸,水和氟,体系中存在Al金属杂质,由于氢键网络结构的影响,所以会存在不稳定的水合氢离子,目前已知铝会与水和磷酸以及F形成配合物,Al会出现五配位、六配位结果会少部分存在四配位结构,Al一般最多与一个磷酸根离子结合。为进一步研究氢键网络结构以及其中质子传递,我们需要对体系中的氢键分为四大类:O-H……O O-H……F F-H……O还有F-H……F四大类,当然肯定是O-H……O的这一类所含氢键最多,而这O-H……O部分供体和受体可以具体区分,体系中H存在于水 磷酸 以及 HF还有水合氢离子 而体系中O存在于水 磷酸 以及水合氢离子中,对于与Al发生配位的水和磷酸以及氟仍旧归纳于四大类,但可以多标记一个Al,不同的供体和受体来源对O-H……O部分再进一步区分。目前的数据来源是VASP计算出来的动力学模拟结果,一般可以采用python中的pymatgen读取vasprun还可以读取POSCAR方便后续原子标定序号。首先对氢键持续性分析,统计氢键在轨迹中出现的频率,筛选稳定氢键(如存活时间大于等于10%轨迹时长)然后对氢迁移路径的提取,统计氢原子在不同受体间的跳跃事件,记录跳跃时间点和涉及的原子索引,网络图构建将供体和受体作为节点,氢键作为边,用工具NetworkX构建动态网络,关键结果分析:迁移路径-高频氢键可能构成主要迁移通道;能垒估算-结合氢键寿命分别推测迁移能垒;网络鲁棒性-通过节点度分布(如某些氧原子是否为枢纽)分析网络稳定性。预期的结果,氢键存活时间热图(横轴为时间,纵轴氢键对),网络拓扑图(节点大小代表连接数,边粗细代表跳跃频率),氢键迁移路径统计结果,希望能够从中发现氢迁移集中在特定分子或原子,跳跃事件和局部结构涨落。注意,在表达氢键时候的标准表达,要考虑放在小论文的严谨性,还有上下标注等等。另外,对于网络拓扑图,节点中显示原子序号,由于涉及整个过程中的所有氢键且原子不断运动,取最后一帧的时候绘制网络拓扑图,由于节点的大小代表连接数,节点越大说明在整个过程中涉及到的氢键越多,所有对节点越大的几个点进行标记。在绘制氢键存活时间热图时绘制两张,一张纵轴的氢键对以四大类氢键标注区间,另一张以拓扑图中节点较大的点为主,方便发现氢迁移集中的特定原子。对于氢键迁移路径图,纵坐标为原先的氢键,横轴为转变后的氢键,氢键的类型标注包括四大类,但将O-H……O部分细分O和H的来源,但整体标注上要看起来格式一致,横纵坐标中间填写跳跃次数。绘制的图用英文标题和标注。在计算分析的过程,为了效率可以每五步取一帧,然后加入进度条查看计算进度,整个部分能定义完就直接计算,不用全部定义完之后再计算,方便修正错误,也避免出错修改之后还得重新加载计算分析。
最新发布
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值