123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import { Injectable } from '@angular/core';
- import { FileOpener } from '@ionic-native/file-opener/ngx';
- import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer/ngx';
- import { AppVersion } from '@ionic-native/app-version/ngx';
- import { File } from '@ionic-native/file/ngx';
- import { AlertController, LoadingController } from '@ionic/angular';
- import { HTTP } from '@ionic-native/http/ngx';
- @Injectable({
- providedIn: 'root'
- })
- export class Update {
- constructor(private file: File,
- private transfer: FileTransfer,
- private nativeHttp: HTTP,
- private appVersion: AppVersion,
- private fileOpener: FileOpener,
- private loadingCtrl: LoadingController,
- public alertController: AlertController) {
- }
- //设备加载完成再去调用硬件
- // ngAfterContentInit(): void {
- // //Called after ngOnInit when the component's or directive's content has been initialized.
- // //Add 'implements AfterContentInit' to the class.
- // this.isUpdate();
- // }
- async isUpdate() {
- // 1、获取当前应用的版本号
- // console.log(this.appVersion.getAppName())
- let server_version_number = await this.getServerVersionNumber()
- let version_number = await this.getVersionNumber()
- if (version_number !== server_version_number) {
- this.showAlert(server_version_number);
- }
- }
- getVersionNumber() {
- return new Promise((resolve, reject) => {
- this.appVersion.getVersionNumber().then((value: any) => {
- resolve(value)
- }).catch(err => {
- console.log('getVersionNumber:' + err);
- return
- });
- })
- }
- getServerVersionNumber() {
- return new Promise((resolve, reject) => {
- this.nativeHttp.get('http://app.sgsino.cn/version.json', {}, {})
- .then(data => {
- resolve(JSON.parse(data.data).version)
- })
- .catch(error => {
- console.log(error.status);
- console.log(error.error); // error message as string
- console.log(error.headers);
- });
- // from(this.nativeHttp.get(`http://192.168.20.15:803/SoftUpdate/SgApp/version.txt`,
- // {},
- // {})).pipe(
- // finalize(() => { })
- // ).subscribe(data => {
- // console.log(JSON.parse(data.data).version)
- // resolve(JSON.parse(data.data).version)
- // }, async err => {
- // console.log(err)
- // });
- // return
- })
- }
- setLoadingText(text: string) {
- const elem = document.querySelector(
- "div.loading-wrapper div.loading-content");
- if (elem) elem.innerHTML = text;
- }
- async showAlert(version) {
- //3.弹窗提示用户是否更新
- const alert = await this.alertController.create({
- header: '升级!',
- message: `发现新版本(${version}),是否立即升级?`,
- buttons: [
- {
- text: '取消',
- role: 'cancel',
- cssClass: 'secondary',
- handler: (blah) => {
- }
- }, {
- text: '确认',
- handler: () => {
- //4.下载apk
- this.downloadApp();
- }
- }
- ]
- });
- await alert.present();
- }
- async downloadApp() {
- //4.下载apk
- const targetUrl = 'http://192.168.20.15:803/SoftUpdate/SgApp/app-debug.apk';
- const fileTransfer: FileTransferObject = this.transfer.create();
- //获取当前应用的安装(home)目录 1、应用包名称要一致 2、升级的包的版本号要大于当前应用的版本号 3、签名要一致 4、sdk 要安装
- fileTransfer.download(targetUrl, this.file.externalDataDirectory + 'app-debug.apk').then((entry) => {
- //6、下载完成调用打开应用
- this.fileOpener.open(entry.toURL(),
- 'application/vnd.android.package-archive')
- .then(() => {
- console.log('File is opened')
- })
- .catch(e => {
- console.log('Error openening file', e)
- });
- }, (error) => {
- alert(JSON.stringify(error));
- });
- let loading = await this.loadingCtrl.create({
- message: '下载进度:0%'
- })
- await loading.present()
- //5、获取下载进度
- fileTransfer.onProgress(async (event) => {
- let num = Math.ceil(event.loaded / event.total * 100); //转化成1-100的进度
- this.setLoadingText(`下载进度:${num}%`)
- if (num === 100) {
- loading.dismiss()
- }
- });
- }
- }
|