ionic2检测下载更新代码及进度百分比显示问题
来源:互联网 发布:eclipse linux 64 下载 编辑:程序博客网 时间:2024/05/18 02:19
ionic2项目需要实力在线更新功能,ios比较简单,跳转到app store的链接地址了
android就需要花一些气力了,上代码
需要先安装一些插件
cordova-plugin-file,cordova.plugins.fileOpener2,
cordova-plugin-file-transfer
appHttp这个自已封装的http请求对象,做拦截用的,可忽略,不在这次说明的内容内
appConfig是自已封装的全局参数对象,主要放平台,版本,服务端请求地址等,可忽略
//检查更新新版本checkVersion(){ this.appHttp.get("http://url").then(data=>{ if(data.code=='0'){ this.alertCtrl.create({ message: '<b>'+data.message+'</b>', buttons: [{ text: '残忍放弃', role: 'cancel' },{ text: '立即下载', handler: () => { this.updateNewApp(data); } } ] }).present(); }else{ this.loadingCtrl.create({spinner: 'hide',content:'已经是最新版本!',duration:2000}).present(); } }).catch(data=>{ this.loadingCtrl.create({spinner: 'hide',content:'检查版本时发生网络异常,请稍后再试!',duration:2000}).present(); })}
updateNewApp = function(data){ if(this.appConfig.platform == 'ios'){ window.open(data.result); }else { let cordova = (<any>window).cordova; if ((<any>window).FileTransfer) { let fileTransfer = new (<any>window).FileTransfer(); let fileURL = cordova.file.externalDataDirectory + "android.apk"; if (!cordova.file.externalDataDirectory) { this.loadingCtrl.create({spinner: 'hide', content: '无法安装,请尝试从应用市场安装更新!', duration: 2000}).present(); return; } let loading = this.loadingCtrl.create({ content: '下载进度:0%', dismissOnPageChange: false }); loading.present(); let no:number = 1; fileTransfer.onprogress = function (progressEvent) { if (progressEvent.lengthComputable) { no = progressEvent.loaded / progressEvent.total * 100; } }; let timer = setInterval(() => { loading.setContent("下载进度:" + Math.floor(no) + "%"); if (no >= 99) { clearInterval(timer); } }, 300); fileTransfer.download(encodeURI(data.result), fileURL, function (r) { if(timer)clearInterval(timer); loading.dismiss(); cordova.plugins.fileOpener2.open(r.toURL(), "application/vnd.android.package-archive"); }, function () { if(timer)clearInterval(timer); loading.dismiss(); this.loadingCtrl.create({spinner: 'hide',content: '出错了,请尝试从应用市场安装更新!', duration: 2000}).present(); }); } }}关键代码在这里:let no:number = 1; fileTransfer.onprogress = function (progressEvent) { if (progressEvent.lengthComputable) { no = progressEvent.loaded / progressEvent.total * 100; } }; let timer = setInterval(() => { loading.setContent("下载进度:" + Math.floor(no) + "%"); if (no >= 99) { clearInterval(timer); } }, 300);后面那个定时器里的代码理论上可以写到上面,但那样百分比分一直不动,达不到效果我的认为是js阻塞了线程,前端内容无法宣染,加了定时器后效果不错
阅读全文
0 0
- ionic2检测下载更新代码及进度百分比显示问题
- 安卓中显示下载进度的百分比
- Ionic2 使用loading组件实现下载进度显示效果
- xutils-httpUtils 下载显示文字进度百分比(toast)
- 实现 异步任务类 下载更新进度条,显示百分比
- 安卓自动更新,静默更新,替换友盟更新可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新
- 解决Retrofit文件下载进度显示问题
- 解决Retrofit文件下载进度显示问题
- okgo下载进度不显示问题
- 解决Retrofit文件下载进度显示问题
- Android提示版本更新+notification显示下载进度
- Android中使用Notification实现应用更新显示下载进度
- CursorAdapter 更新下载进度
- android文件下载及自定义通知显示下载进度
- android文件下载及自定义通知显示下载进度
- jsp中显示百分比进度的例子
- echo用法,显示百分比,进度等信息
- 场景切换之进度条显示进度百分比
- Java微信分享接口开发
- jquery多class层级选择元素的实现以及模糊匹配
- Now Launching Native Debug Session Attention! No symbol directories found
- 重磅丨深度解读UN报告:AI新技术革命将如何重塑就业和全球化格局?
- Activiti 任意驳回
- ionic2检测下载更新代码及进度百分比显示问题
- jquery 表格 数据渲染 加速
- swing设置面板背景图片
- Android内存泄露分析之-内存泄露的原因
- 关于模拟器
- 微信分享SDK接入——Java
- java利用Freemarker模板生成格式友好的doc文档(这种方式不支持docx)
- jquery实现编辑直接选中文本内容
- mac下用browser-sync 做一个webapp的手机端的测试