1. 程式人生 > >ionic2檢測下載更新程式碼及進度百分比顯示問題

ionic2檢測下載更新程式碼及進度百分比顯示問題

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阻塞了執行緒,前端內容無法宣染,加了定時器後效果不錯


相關推薦

ionic2檢測下載更新程式碼進度百分比顯示問題

ionic2專案需要實力線上更新功能,ios比較簡單,跳轉到app store的連結地址了 android就需要花一些氣力了,上程式碼 需要先安裝一些外掛 cordova-plugin-file,cordova.plugins.fileOpener2,cordov

ubuntu下載更新軟體apt-get,yum,rpm常用命令詳解

在ubuntu伺服器下安裝包的時候,經常會用到sudo apt-get install 包名 或 sudo pip install 包名,那麼兩者有什麼區別呢? 1.區別 pip用來安裝來自PyPI(https://www.python.org/)的python所有的依賴包,並且可以選擇安裝任

MyEclipse最新版-版本更新說明下載 - MyEclipse官方中文網

教程 1-1 ron www myeclipse -s tab www. 更新說明 http://www.myeclipsecn.com/learningcenter/myeclipse-update/ 【重要更新】MyEclipse 2015正式版發布 【重要更新】M

Eclipse外掛開發之jgit下載更新程式碼

Eclipse外掛開發之jgit下載與更新程式碼                     &nb

Android OkGo下載更新APK實現程式碼

直接上程式碼: final String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/download"; final String fileName = "abc.ap

AsyncTask的使用進度條的更新

原文連結:  AsyncTask和Handler對比 1 ) AsyncTask實現的原理,和適用的優缺點 AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過

libcurl獲取下載進度百分比下載速度,剩餘時間

如果希望獲取下載或者上傳進度相關資訊,就給CURLOPT_NOPROGRESS屬性設定0值 int ret = curl_easy_setopt(easy_handle, CURLOPT_URL, "http://speedtest.wdc01.softlayer.com

MTCNN 人臉檢測論文解讀,tensorflow程式碼實現

MTCNN簡介 《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》論文解讀。 相比於R-CNN系列通用檢測方法,本文更加針對人臉檢測這一專門的任務,速度和精度都有足夠的提升。R-CNN,

git命令使用/上傳或更新程式碼到github,github上 Studio生成依賴

> 上傳或更新程式碼到github --- 一步步教你上傳原生代碼到GitHub- http://blog.csdn.net/zlj_jeck/article/details/51454285 第一次將原生代碼推給Github步驟: 1.去github上建立自己的R

# cs231n 深度學習與計算機視覺(資料彙總)--程式碼說明 python3.x和python2.x的版本(每次更新完成的作業)

cs231n 深度學習與計算機視覺(資料彙總)–程式碼及說明 python3.x和python2.x的版本(每次更新完成的作業) 標籤(空格分隔): 神經網路 1.python2.x版本 程式碼、課程 2.python3.x版本 這個是2017

win10預覽版系統10036 P2P更新方法下載地址

windows10系統又出了10036版本的預覽版系統,小編提供p2p更新方法,豆豆系統也提供了網盤下載地址!歡迎大家下載體驗! 在Windows10預覽版10036的設定選項中,其中一個頁面允許使用者更改系統與應用更新的下載來源。確切的說,使用者可以選擇從本地網路裝置

MFC 下載網路檔案到本地 利用 CHttpFile 和 URLDownloadToFile 【可設超時進度】兩種方式

說明 方法1較為簡單,通用的多,但在某些環境下可能出現未知錯誤(也有可能你碰不到,反正我是碰到了)。 方法2實現相對麻煩點,但可設定超時時間以及進度展示,但要例項化一個LPBINDSTATUSCALLBACK 子類,在這個子類中去實現。這個相對好用點,方法1

使用jquery.form.js實現檔案上傳進度條前端程式碼

1、背景 ajax的表單提交只能提交data資料到後臺,沒法實現file檔案的上傳還有展示進度功能,這裡用到form.js的外掛來實現,搭配css樣式簡單易上手,而且高大上,推薦使用。 2、靜態頁搭建 html程式碼如下 <div clas

opencv學習筆記1::訪問影象中畫素的三類方法(用指標,迭代器,動態地址)程式碼用時檢測

本文參考《Opencv3 入門》 作者毛星雲//---------------------------------【標頭檔案、名稱空間包含部分】----------------------------//描述:包含程式所使用的標頭檔案和名稱空間//--------------

android系統版本程式碼下載、編譯釋出

不積跬步無以至千里 一、程式碼的下載 1、建立資料夾 在伺服器的個人賬戶下建立一個此係統版本的專用資料夾(F9)(事先宣告這是Q9的專案) mkdir F9 2、設定git資訊 git config –global user.email

Android網路開源庫-Retrofit(二) 檔案上傳、下載進度監聽

1.寫在前面的話 首先說明,我還沒太搞懂retrofit,目前,這篇部落格只能給出這幾個內容。 檔案上傳 檔案下載 檔案下載的進度監聽 還有這兩點沒弄好, 多檔案一次上傳 (批量上傳) 檔案上傳進度監聽 當前使用版本 compile 'com

TortoiseGit檢出github程式碼更新

最後編輯:2014-12-22 17:37 參考部落格:http://www.cnblogs.com/yelaiju/p/3180986.html 第一步:獲取原始碼          方法一:在github開源專案的頁面上可以找到下圖的三個獲取原始碼方式。     

使用eclipse搭建安卓開發環境,解決ADTSDK下載更新慢的問題

eclipse大家都有,因為眾所周知的原因,不能直接在上面更新ADT,需要將ADT下載下來更新。下載地址:http://tools.android-studio.org/index.php/adt-bundle-plugin這是官網的下載,下載到本地之後。注意,最好取消Con

android EasyRxRetrofit封裝(包括上傳下載進度監聽)

前言 很久以前封裝過一次RxJava+Retrofit,最近想著把檔案上傳的進度監聽、檔案下載及進度監聽加入進去。由於之前的封裝太過匆忙,可用性太低,所以重新封裝了一個,令其可真正使用於實際專案中,命名為EasyRxRetrofit,使用RxJava2

【筆記】canvas圖片預加載進度條的實現

函數 style uil 圖片加載 mage code 重繪 執行 ces /*star *loading模塊 *實現圖片的預加載,並顯示進度條 *參數:圖片數組對象,加載完成的回調函數 */ function loadImages(sources,c