一、最近做了一个app自动更新功能,用的基本都是网上找得到的。

    1、h5+ 规范 :  http://www.html5plus.org/doc/zh_cn/maps.html

    2、环形进度条插件:http://www.jq22.com/jquery-info4495(不知道什么原因,下载的时候,没有显示任何提示,所以人为加个下载的提示)

  二、本来用的mui框架也有进度条提示,但是好单调,又不显眼。

    1、效果如下,虽然说超方便的。mui 样式:http://dev.dcloud.net.cn/mui/ui/#progressbar,html这里就不整理了,链接里有。

    2、右边为 ‘环形进度条插件’的效果

    

  三、下面不多说,po上代码

    1、html代码

     <!-- lyj 圆形插件 -->
<link href="css/progressbar-css/base.css" rel="stylesheet" type="text/css" />
<link href="css/progressbar-css/project_base.css" rel="stylesheet" type="text/css" />
<link href="css/progressbar-css/radialindicator.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.htmleaf-icon {
color: #fff;
}
.showOrHidden {
display: none; /*未进行下载更新前隐藏*/
}
</style>
<!-- 圆形进度条插件 -->
     
    
     <!-- html -->
     <h3 id="download-title" class="showOrHidden" style="float: left; position: absolute; top: 55%; left: 33%; color: green;">App下载中...</h3>
<div class="prg-cont rad-prg showOrHidden" id="indicatorContainer" style="float: left; position: absolute; top: 66%; left: 33%;"></div>    <!-- html -->
     <script src="js/mui.js"></script>
<script src="js/jquery.min.js"></script>
<!-- lyj 圆形插件 -->
<script type="text/javascript" src="js/progressbar/base.js"></script>
<script type="text/javascript" src="js/progressbar/project_base.js"></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
</script>
<script src="js/progressbar/radialindicator.js"></script>

    2.1、环形进度条 js

       var appTotalSize; //将要下载的app的大小
$('#indicatorContainer').radialIndicator({
barColor: '#FFA500', //颜色,16进制
barWidth: 10,     //宽度
initValue: 0, //初始值
roundCorner: true,
percentage: true
});
       //动态set值
var radialObj = $('#indicatorContainer').data('radialIndicator');

    2.2、自动更新 js

      function updateApp() {

                plus.runtime.getProperty(plus.runtime.appid, function(inf) {
//获取app的版本信息
var ver = inf.version;
//接口地址
var url = $config.IP + '【你请求接口的地址】';
var ua = navigator.userAgent.toLowerCase(); //判断浏览器类型
if(/iphone|ipad|ipod/.test(ua)) { //苹果(暂无)
$.ajax({
type: "get",
dataType: 'json',
url: "https://itunes.apple.com/lookup?id=111030274", //获取当前上架APPStore版本信息
data: {
id: 111030274 //APP唯一标识ID
},
contentType: 'application/x-www-form-urlencoded;charset=UTF-8',
success: function(data) {
console.log("jsjsjsjs" + json2string(data));
$.each(data, function(i, norms) {
$.each(norms, function(key, value) {
$.each(value, function(j, normItem) {
if(j == "version") {
if(normItem > ver) {
alert("发现新版本:V" + normItem);
document.location.href = 'https://itunes.apple.com/cn/app/san-gu-hui/id111030274?mt=8'; //上新APPStore下载地址
}
}
});
});
});
return;
}
});
} else if(/android/.test(ua)) {
//获取远程数据库中上新andriod版本号
mui.ajax(url, {
data: {
apkVersion: ver,
},
dataType: 'json',
type: 'GET',
timeout: 6000,
success: function(data) {
//比较版本信息
if(data.map.appVersion != ver) {
var btnArray = ['暂不更新', '立即更新'];
mui.confirm("发现新版本:V" + data.map.appVersion + ",是否立即更新安装?", '发现新版本', btnArray, function(e) {
if(e.index == 1) {
//显示环形进度条
$('#indicatorContainer').removeClass('showOrHidden');
$('#download-title').removeClass('showOrHidden');
//返回的app总大小
appTotalSize = data.map.totalSize;
mui.toast('版本更新中...');
//创建更新
var dtask = plus.downloader.createDownload(【下载app的地址的目录】, {
method: "POST",
data: data.map.fileName, //要下载的apk文件名
}, function(d, status) {
if(status == 200) {
sleep(300);
var path = d.filename; //下载apk
// console.log(path);
plus.runtime.install(path); // 自动安装apk文件
} else {
alert('版本更新失败:' + status);
}
});
//为下载添加监听事件
dtask.addEventListener("statechanged", onStateChanged, true);
//为下载添加请求头
dtask.setRequestHeader('Content-Type', 'application/json'); // 设置POST请求提交的数据类型为JSON字符串
dtask.start();
}
});
} else {
console.log('当前版本号已是最新');
return;
}
},
error: function(xhr, type, errerThrown) {
//mui.toast('网络异常,请稍候再试');
}
});
}
}); function onStateChanged(download, status) {
var i = download.downloadedSize;
//换算成百分比
i *= 100 / appTotalSize;
radialObj.animate(i); //显示部分的不足,就是网速差的情况会出现进度条的数值与实际有差别,网速差,怪我咯。
if(download.state == 4 && status == 200) {
// 下载完成
$('#indicatorContainer').addClass('showOrHidden');
$('#download-title').addClass('showOrHidden');
}
} }

  四、如果想做简单点的,可以采用mui框架的进度条

    1、将html部分改为

<div id="progressbar" class="mui-progressbar showOrHidden" >
<span></span>
</div>

    2、js的 onStateChanged 方法修改  

$('#progressbar').removeClass('showOrHidden');
function onStateChanged(download, status) {
var i = download.downloadedSize;
//换算成百分比
i *= 100 / appTotalSize;
mui('body').progressbar({
progress: i
}).show();
radialObj.animate(i);
if(download.state == 4 && status == 200) {
// 下载完成
$('#progressbar').addClass('showOrHidden');
}
}

  五、最后,我不知道怎么处理安装后的apk安装包,有没有大神告知,如何处理安装完后的apk安装包?

H5+app -- 自动更新的更多相关文章

  1. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  2. Web APP自动更新

    我们的手机软件每天都要经营,经常需要更新,比如程序的Bug,好的功能,好的洁面... ... 这就需要我们的用户打开web app时候自动更新客户端程序,而不是再去应用程序商店从新下载.今天的笔记就是 ...

  3. web app升级—带进度条的App自动更新

    带进度条的App自动更新,效果如下图所示:   技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template> <div> <va ...

  4. 解决“iOS 7 app自动更新,无法在app中向用户展示更新内容”问题

    转自cocoachina iOS 7能在后台自动app,这对开发者来说和用户都很方便,但是还是有一些缺点.用户不会知道app本次更新的内容,除非他们上到app的App Store页面去查看.开发者也会 ...

  5. App自动更新(DownloadManager下载器)

    一.开门见山 代码: object AppUpdateManager { const val APP_UPDATE_APK = "update.apk" private var b ...

  6. Android 云服务器的搭建和友盟APP自动更新功能的实现

    setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...

  7. 安卓---app自动更新

    主要参考:http://blog.csdn.net/jdsjlzx/article/details/46356013/ 效果如下: 大致思路:[原文] 首先,我们要有一个可以被手机访问的后台. 这里有 ...

  8. Android App自动更新解决方案(DownloadManager)

    一开始,我们先向服务器请求数据获取版本 public ObservableField<VersionBean> appVersion = new ObservableField<&g ...

  9. App自动更新之通知栏下载

    见证过博客园的多次升级,你也希望你的软件通过更新发布新特性通知用户吧,是的.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.设计思路,使用Versio ...

随机推荐

  1. 彻底修改eclipse中项目的名称

    需要四个步骤: 一.右键工程:Refactor->Rename,或选中工程按F2,修改名称 二.修改项目目录下:.project文件 三.项目右键属性 --> Web Project Se ...

  2. 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用

    标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...

  3. Oracle11g入门

    数据类型 数据类型 表示 数字 number 日期时间 date 字符串 char(长度)/varchar2(长度) 约束条件 名称 约束 唯一 unique 非空约束 not null 主键约束 p ...

  4. 致远OA_0day批量植Cknife马一步到位

    最近各位师傅都在刷这个嘛,原本的exp是上传一个test123456.jsp的命令执行的马子,不过我在试的时候发现替换成C刀一句话出错,原因未知,并且test123456.jsp如果存在的话用原来ex ...

  5. 关于seaJs合并压缩(gulp-seajs-combine )路径与文件ID匹配问题。

    前段时间和有大家介绍过用 gulp-seajs-combine 来打包seaJs文件.大家会发现合并seaJs一个很奇怪的现象,那就是它的 ID和路径匹配原则.使得有些文件已经合并过去了,但还是会提示 ...

  6. 小白学 Python(6):基础运算符(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. phpfpm的原理是什么?

    php-fpm是一种master(主)/worker(子)多进程架构,与nginx设计风格有点类似.master进程主要负责CGI及PHP环境初始化.事件监听.子进程状态等等,worker进程负责处理 ...

  8. Arduino学习笔记③ 经典LED

    1.前言     今天我们开始同时讲解理论以及实践.对于绝大部分有过单片机编程经历的人来说,第一个接触的大多数就是LED灯(忽然想起博主大一那个懵懂的时代,当时大三的师兄给我们展现了一把流水灯功力,当 ...

  9. java入门到秃路线导航,元芳你怎么看?【教学视频+博客+书籍整理】

    目录 一.Java基础 二.关于JavaWeb基础 三.关于数据库 四.关于ssm框架 五.关于数据结构与算法 六.关于开发工具idea 七.关于项目管理工具Mawen.Git.SVN.Gradle. ...

  10. 数据库系统(六)---MySQL语句及存储过程

    一.DDL.DML.DCL常用语句 1.DDL(Data Definition Language)数据库定义语言 (1)数据库模式定义 #创建数据库 create database if exsite ...