1.安装插件
(1)File
$ ionic cordova plugin add cordova-plugin-file
$ npm install --save @ionic-native/file
(2)Transfer
$ ionic cordova plugin add cordova-plugin-file-transfer
$ npm install --save @ionic-native/file-transfer
(3)File Opener
$ ionic cordova plugin add cordova-plugin-file-opener2
$ npm install --save @ionic-native/file-opener
(4)App Version
$ ionic cordova plugin add cordova-plugin-app-version
$ npm install --save @ionic-native/app-version
(5)In App Browser
$ ionic cordova plugin add cordova-plugin-inappbrowser
$ npm install --save @ionic-native/in-app-browser
2.App.module.ts引包
import { File } from "@ionic-native/file"; import { FileOpener } from "@ionic-native/file-opener"; import { FileTransfer,FileTransferObject } from "@ionic-native/file-transfer"; import { AppVersion } from "@ionic-native/app-version"; import { InAppBrowser} from "@ionic-native/in-app-browser"; import { NativeService } from "../provider/NativeService";
providers: [ StatusBar, SplashScreen, {provide: ErrorHandler, useClass: IonicErrorHandler}, File, AppVersion, FileOpener, FileTransfer, FileTransferObject, NativeService, InAppBrowser ]
3.创建NativeService.ts文件
/** * Created by yanxiaojun617@163.com on 12-27. */ import {Injectable} from '@angular/core'; import {Platform, AlertController} from 'ionic-angular'; import {AppVersion} from '@ionic-native/app-version'; import {File} from '@ionic-native/file'; import {FileTransfer,FileTransferObject} from "@ionic-native/file-transfer"; import {FileOpener} from '@ionic-native/file-opener'; import {InAppBrowser} from '@ionic-native/in-app-browser'; @Injectable() export class NativeService { constructor(private platform: Platform, private alertCtrl: AlertController, private transfer: FileTransfer, private appVersion: AppVersion, private file: File, private fileOpener: FileOpener, private inAppBrowser: InAppBrowser) { } /** * 检查app是否需要升级 */ detectionUpgrade() { //这里连接后台获取app最新版本号,然后与当前app版本号(this.getVersionNumber())对比 //版本号不一样就需要申请,不需要升级就return this.alertCtrl.create({ title: '升级', subTitle: '发现新版本,是否立即升级?', buttons: [{text: '取消'}, { text: '确定', handler: () => { this.downloadApp(); } } ] }).present(); } /** * 下载安装app */ downloadApp() { if (this.isAndroid()) { let alert = this.alertCtrl.create({ title: '下载进度:0%', enableBackdropDismiss: false, buttons: ['后台下载'] }); alert.present(); const fileTransfer: FileTransferObject = this.transfer.create(); const apk = this.file.externalRootDirectory + 'android.apk'; //apk保存的目录 fileTransfer.download("", apk).then(() => { this.fileOpener.open(apk,'application/vnd.android.package-archive'); }); fileTransfer.onProgress((event: ProgressEvent) => { let num = Math.floor(event.loaded / event.total * 100); if (num === 100) { alert.dismiss(); } else { let title = document.getElementsByClassName('alert-title')[0]; title && (title.innerHTML = '下载进度:' + num + '%'); } }); } if (this.isIos()) { this.openUrlByBrowser("这里边填写下载iOS地址"); } } /** * 通过浏览器打开url */ openUrlByBrowser(url:string):void { this.inAppBrowser.create(url, '_system'); } /** * 是否真机环境 * @return {boolean} */ isMobile(): boolean { return this.platform.is('mobile') && !this.platform.is('mobileweb'); } /** * 是否android真机环境 * @return {boolean} */ isAndroid(): boolean { return this.isMobile() && this.platform.is('android'); } /** * 是否ios真机环境 * @return {boolean} */ isIos(): boolean { return this.isMobile() && (this.platform.is('ios') || this.platform.is('ipad') || this.platform.is('iphone')); } /** * 获得app版本号,如0.01 * @description 对应/config.xml中version的值 * @returns {Promise<string>} */ getVersionNumber(): Promise<string> { return new Promise((resolve) => { this.appVersion.getVersionNumber().then((value: string) => { resolve(value); }).catch(err => { console.log('getVersionNumber:' + err); }); }); } }
4.
app.component.ts调用检查是否升级方法
this.nativeService.detectionUpgrade();//检查app是否升级
注:在config.xml中修改app的版本号 若不修改 app覆盖可能出现问题
demo下载地址:https://pan.baidu.com/s/1J3S-xe00VbTF9-ezAoO96A
版权声明:本文为qq_30737525原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。