不废话,直接上代码

首先安装四个必备的插件:

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用来写更新代码

ionic g provider UpdateAPP

详细更新代码

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[].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) * ;
uploading.setContent("已经下载:" + Math.floor(downloadProgress) + "%"); if (downloadProgress > ) {
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^)/~

效果:

转载请注明出处:http://www.cnblogs.com/super-cj/p/6279009.html

ionic2 rc2 添加版本更新自动升级功能的更多相关文章

  1. NSIS:应用软件自动升级功能的探索与实践

    原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_1 ...

  2. Laravel添加代码自动提示功能

    在使用Laravel框架的时候,可能会碰上代码无法自动提示的情况,那么如何添加自动提示功能呢? 1,首先在composer.json中加入以下内容: "require": { &q ...

  3. Android 一s个相对完整的自动升级功能实现代码

    由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...

  4. Android 一个相对完整的自动升级功能实现代码

    由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...

  5. Delphi程序的自动升级功能的实现(AutoUpdate使用指南)

    在UtiMnid组件下,利用auAutoUpgrader实现自动升级(已经测试通过) 第一步:下载AutoUpgrader.Pro.v4.6.4. 第二步:打开AutoUpgrader.Pro.v4. ...

  6. 在Zend Studio中为ThinkPHP添加代码自动提示功能

    身边很多朋友都使用ThinkPHP或CodeIgniter等开发框架为自己的项目提高开发效率. 在得力于这些优秀框架良好的设计结构的同时,也头疼于代码的自动完成提示功能没有纯PHP网站那么完善了.经常 ...

  7. android5.1 Recovery添加从U盘升级功能【转】

    本文转载自:http://blog.csdn.net/tfslovexizi/article/details/73835594 之前看到过一个人写了4.4上添加U盘升级功能的博客http://blog ...

  8. 使用SimpleUpdater实现现有程序升级功能

    项目:https://github.com/iccfish/FSLib.App.SimpleUpdater C/S程式一般需要部署在多台机器上,如果程式有变动,需要一台一台重新安装,相当麻烦,如果我们 ...

  9. java CS结构软件自动升级的实现

    前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服 ...

随机推荐

  1. oracle 游标分析与理解(基础)

    --------------坚持写一点 慢慢成长 希望对大家有所帮助(小白的理解)  也是自己学习后的理解(只是一小部分,需要更深沉的还需日后成长) 接下来就是我们的重点 --游标 提供了一种对从表中 ...

  2. legend2---开发日志11(如何提高终极开发效率)

    legend2---开发日志11(如何提高终极开发效率) 一.总结 一句话总结: 实在没必要摸索着做,直接学了做,用专门的东西来做,岂不是要省时省事很多.岂不美哉. 1.vue中的滚动字幕动画效果如何 ...

  3. react state成员

    组件中包括state,props与render成员函数. react中,主要通过定义state,根据不同state渲染对应用户界面. 过程调用了成员函数setState(data,callback). ...

  4. Android系统下app测试功能点

    一.安装卸载 1.验证app能否正常的安装启动运行,安装后的文件夹及文件是否写到了指定的目录里,卸载后相关文件是否清除 2.软件安装/卸载过程中意外情况的处理是否符合需求(如死机,重启,断电) 3.安 ...

  5. 博弈论初步(SG函数)

    讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...

  6. Docker中安装elasticsearch6.7.1

    先拉取镜像  docker pull docker.elastic.co/elasticsearch/elasticsearch:6.7.1    然后创建容器 (这是一条长的命令!!!)  dock ...

  7. word中一页中添加两种不同的页码

    ,在文档编写的过程中,可能一个页面需要编写两个不同的页码,举个例子,在页脚有一个页码是整个文档的页码,页眉有一个页码,是每个章节的页码: 设置如下: 此处选中这个图标是为了能够看到分节符和其他的符号 ...

  8. 数据结构与算法之PHP排序算法(桶排序)

    一.基本思想 桶排序是将待排序的数据分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法.也是典型的分而治之(divide-and-co ...

  9. day1扩展作业

    作业一:博客作业二:编写登陆接口,●输入用户名密码(有文件存储用户名,命名)●认证成功后显示欢迎信息●输错三次后锁定(再次运行程序,还是输入上次输入的就显示已被锁定)作业三:多级菜单●三级菜单 ●可依 ...

  10. ORA-28000 帐户已被锁定问题处理

    1.问题描述 应用监控程序报警ORA-28000,PL/SQL无法登陆数据库 2.问题分析 oracle11g中默认在default概要文件中设置了 “FAILED_LOGIN_ATTEMPTS=10 ...