不廢話,直接上代碼javascript
首先安裝四個必備的插件:html
cordova plugin add cordova-plugin-app-version //獲取APP版本
cordova plugin add cordova-plugin-file //文件管理
cordova plugin add cordova-plugin-file-transfer //文件傳輸
cordova plugin add cordova-plugin-file-opener2 //文件打開
運行上面給出的命令安裝好這四個插件,建立一個Porvider用來寫更新代碼java
ionic g provider UpdateAPP
詳細更新代碼android
import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import 'rxjs/add/operator/map'; import { Global } from '../providers/global/global'; //這是我我的封裝的一個全局類,沒必要理會 import { LoadingController, AlertController } from 'ionic-angular'; //引入加載框和更新提示框 import { AppVersion, Transfer, FileOpener } from 'ionic-native' //引入更新須要的幾個插件 @Injectable() export class UpdateappProvider { private appUrl="http://xxx/xxx.apk"; //能夠從服務端獲取更新APP的路徑 constructor(public http: Http, public g: Global, private loadingCtrl: LoadingController, private alertCtrl: AlertController) { } //檢查版本更新 checkUpdate() { let execName = 'xxx'; let param = { APPNAME: 'xxx', }; //查詢當前服務器的APP版本號與當前版本號進行對比 //g.Post是我本身封裝一個數據查詢類 請自行替換本身的 this.g.Post(execName, param, '', true, true).then((data: Array<any>) => { console.log(data); AppVersion.getVersionNumber().then((version) => { console.log(version); if (data[0].VERSION != version) { // this.appUrl=data[0].APPURL; //能夠從服務端獲取更新APP的路徑 let updateAlert = this.alertCtrl.create({ title: '提示', message: '發現新版本,是否當即更新?', buttons: [{ text: '取消' }, { text: '肯定', handler: data => { this.upgradeApp(); } } ] }); updateAlert.present(); } }); }); } upgradeApp() { const fileTransfer = new Transfer(); let uploading = this.loadingCtrl.create({ content: "安裝包正在下載...", dismissOnPageChange: false }); var targetPath = "/sdcard/Download/CaiLaoBan.apk"; //APP下載存放的路徑,能夠使用cordova file插件進行相關配置 // var options = {}; uploading.present(); fileTransfer.onProgress((event) => { //進度,這裏使用文字顯示下載百分比 // setTimeout(() => { var downloadProgress = (event.loaded / event.total) * 100; uploading.setContent("已經下載:" + Math.floor(downloadProgress) + "%"); if (downloadProgress > 99) { uploading.dismiss(); } // }, 100); /* setTimeout(() => { uploading.dismiss(); }, 10000);*/ }); //url爲服務端地址 //targetPath爲設備上的地址 fileTransfer.download(this.appUrl, targetPath, true).then( (result) => { uploading.dismiss(); FileOpener.open(targetPath, 'application/vnd.android.package-archive').then( () => { }); } ); } }
在app.component.ts的構造方法裏調用升級代碼服務器
//檢查應用是否須要更新 updateapp.checkUpdate();
若有問題,歡迎討論\(^o^)/~app
效果:ionic
轉載請註明出處:http://www.cnblogs.com/super-cj/p/6279009.htmlide