最新要闻
- 京东客服确认:百亿补贴商品不支持价保!
- 世界消息!“点对点”自动驾驶 红旗发布E702官图:百公里人工接管小于0.5次
- 速讯:2499元 荣耀观影眼镜发布:轻至80g、500nit入眼亮度
- 世界实时:荣耀最强旗舰!一图了解荣耀Magic5至臻版:6699元
- 环球焦点!超薄+四种体验:冈本Okamoto金装系列1.7元/枚大促
- 要闻:拖胆选号怎么玩_拖胆选号
- 每日播报!《消费者报告》公布最不可靠的10款电动车:特斯拉双车上榜
- 微头条丨荣耀Magic 5系列亮相:曲面屏也能拥有直屏体验
- 天天精选!女子算命核桃树挡姻缘 家人将树砍掉:当事人称要相信科学
- 短讯!熬夜后心里咯噔一下要注意:有三大风险
- 全球快讯:浪费人才?酒店回应去一本院校招聘洗碗工:2千工资对应发展空间广
- 环球观热点:努比亚Z50 Ultra缩小系统固件:仅8个不可卸载应用
- 【天天快播报】特斯拉失控、单踏板风波不断 为何还买?吉利李书福:建议大家买国产新能源汽车
- 2月XGP最佳游戏玩家投票:俄罗斯3A大作《原子之心》荣获第一
- 3月6日译名发布:乔治·桑托斯
- 黄鳝吃什么东西
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
记录--uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
需求描述
如果想要做一个app
的话,可以有很多种选择方案,uni-app
是其中的一个性价比高一些(坑多一些)的方案。本文记录一下,uni-app
打安卓包
以后,需要检查并下载更新
,且显示进度条
的功能。
(资料图)
代码在自己公司项目中应用,大家可放心使用。
需求:
- 检查版本是否是最新版
- 若不是最新版就下载远端服务器的最新的apk包
- 下载中需要显示下载了多少了,当下载到100%的时候,自动安装接口
思路分析
比如我们有一个设置页面,在设置页面中可以去进行版本更新。
1. 检查是不是最新版
当每次进入设置页面的时候,在onShow钩子
中向后端发请求,获取最新版本的信息,并与当前的版本信息做对比。
比如后端提供的有这样一个:获取最新版本信息的接口
// 接口请求,返回数据如下:{"code":1,"success":true,"data":{"id":123456, // 存在数据库的id"applyName":"拼夕夕", // 版本名称"applyVersion":"1.2.3", // 版本号"versionDescribe":"此版本新增,是兄弟就帮忙砍一刀功能", // 版本描述 "fileSize":11566511, // 文件的总大小,计算下载进度百分比需要使用"filePath":"http://ashuai.work:10000/appSrc/pdd.apk", // 版本的url路径,正常在浏览器地址栏中输入即直接下载了 ... // 等等},"msg":"操作成功"}
我们首先拿到后端返回的这个applyVersion
字段的值"1.2.3"去和当下的版本值
作对比
。如果远端的最新版的版本号高于当下的版本号,就说明要更新了。否则当下的就是最新版,就不用更新。
那问题又来了,如何能拿到当下的版本呢?没关系,官方提供的有api
,可以直接获取的,代码如下:
plus.runtime.getProperty(plus.runtime.appid, (info) => { this.currentVersion = info.version; // 将当下版本存到currentVersion字段中去})
注意这个获取版本号的操作是异步的哦,异步,异步。
然后将版本号字符串"a.b.c"
转换成数字
进行对比即可。
方式有很多种,比如:a*100000 + b*1000 + c*1
// 当然这里需要if(this.applyVersionVal > this.currentVersionVal){ // 需要更新 this.AndroidUpdate()}else { // 当前已是最新版本 uni.showToast({ title: "当前已是最新版本", duration: 2000, icon:"none" }); return}
2. 更新下载服务器远端的apk文件&进度条显示
调用安卓的方法,创建一个下载任务,能拿到某一时刻下载的文件的大小,对比总大小即可得到下载进度百分比
AndroidCheckUpdate() { const _this = this uni.showModal({ title: "版本更新", content: "APP有新版本发布,点击 立即更新 进行最新版本下载。", confirmText: "立即更新", cancelText: "稍后进行", success: function(res) { if (res.confirm) { _this.show = true // show变量控制一个下载进度弹框(这个UI样式自己写即可) // 创建一个下载任务,并根据后端返回的apk静态资源地址filePath进行下载 var dtask = plus.downloader.createDownload(_this.filePath, {}, function(d, status) { // 下载完成 if (status == 200) { _this.show = false // 下载完成再把下载进度弹框关闭即可 plus.runtime.install(plus.io.convertLocalFileSystemURL(d .filename), {}, {}, function(error) { uni.showToast({ title: "安装失败", duration: 1500 }); }) } else { uni.showToast({ title: "更新失败", duration: 1500 }); } }); dtask.start(); // 下载任务开始下载 // 关于进度的获取是使用定时器不断获取已经下载的文件的大小,再对比总大小即可 let timer = setInterval(() => { let percent = (dtask.downloadedSize / this.fileSize).toFixed(2) // fileSize文件总大小,后端返回的 _this.percentVal = Math.floor(percent * 100) // 转成整数展示 if (percent >= 1) { // 注意百分比,及时清除定时器即可 clearInterval(timer) } }, 18) } else if (res.cancel) { console.log("稍后更新"); } } });}
进度条使用的是u-popup组件,如下:
下载中 请勿退出 {{percentVal}}%
注意,下载这一块是要在手机模拟器上,才能看到效果哦。笔者工作中使用的是逍遥模拟器,挺好。
因为
plus
变量在浏览器中是没有的
版本号
效果图
下载完毕以后,安卓自动安装
为了方便大家去验证,笔者也提供了一个apk静态资源包filePath: http://ashuai.work:10000/appSrc/pdd.apk
,在地址栏输入就可以访问了。
静态资源apk接口
express
同级目录下,新建文件夹app
存放一下apk
文件
// 先查询有没有这个app,有的话返回这个静态app资源url地址route.get("/findAppUrl", (req, res) => { res.header("Access-Control-Allow-Origin", "*"); let appName = (req.query.appName ? req.query.appName : "pdd") + ".apk" let files = fs.readdirSync("./app") if (files.includes(appName)) { // 库存有 res.send({ code: "00000000", url: "http://ashuai.work:10000/appSrc/" + appName }) } else { // 库存没有 res.send({ code: "00000000", url: "" }) }})// 当访问app资源时,就把对应的资源以流的形式返回去route.get("/appSrc/:fileName", (req, res) => { res.header("Access-Control-Allow-Origin", "*"); let fileName = req.params.fileName // wms2month.apk try { // 存储一份app的路径 let appUrl = "./app/" + fileName let stat = fs.statSync(appUrl) res.writeHead(200, { "Content-Type": "application/vnd.android.package-archive", // 安卓 "Content-Length": stat.size, }) //创建可读流 let readStream = fs.createReadStream(appUrl) // 将读取的结果以管道pipe流的方式返回 readStream.pipe(res); } catch (error) { res.send("暂无此app文件哦") }})
至于强制更新的话,就做一个判断即可,当前版本不是服务器远端的最新版本的话,就不让往下走,不让登录即可
本文转载于:
https://juejin.cn/post/7197401681129914405
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
-
焦点信息:基于datax抽取mysql数据到HDFS
一、安装datax通过https: datax-opensource oss-cn-hangzhou aliyuncs com 202210 datax tar gz这个地址下载datax tar
来源: 记录--uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现
焦点信息:基于datax抽取mysql数据到HDFS
阅读并手撸JS版Naive Ui Admin骨架
京东客服确认:百亿补贴商品不支持价保!
世界消息!“点对点”自动驾驶 红旗发布E702官图:百公里人工接管小于0.5次
速讯:2499元 荣耀观影眼镜发布:轻至80g、500nit入眼亮度
世界实时:荣耀最强旗舰!一图了解荣耀Magic5至臻版:6699元
环球焦点!超薄+四种体验:冈本Okamoto金装系列1.7元/枚大促
要闻:拖胆选号怎么玩_拖胆选号
Django-2
当前观点:【建议收藏】超详细的Canal入门,看这篇就够了!!!
当前快看:3.6 C提高3day
本地硬盘文件映射公网 cpolar轻松做到
顶象中标GovHK香港政府一站通数字化项目
每日播报!《消费者报告》公布最不可靠的10款电动车:特斯拉双车上榜
微头条丨荣耀Magic 5系列亮相:曲面屏也能拥有直屏体验
天天精选!女子算命核桃树挡姻缘 家人将树砍掉:当事人称要相信科学
安装Redis6.2.7主从哨兵集群教程
当前视点!NTP对时服务器(NTP电子时钟)重要参数指标表
焦点速讯:接口安全性问题02——jwt身份验证与授权
短讯!熬夜后心里咯噔一下要注意:有三大风险
全球快讯:浪费人才?酒店回应去一本院校招聘洗碗工:2千工资对应发展空间广
环球观热点:努比亚Z50 Ultra缩小系统固件:仅8个不可卸载应用
【天天快播报】特斯拉失控、单踏板风波不断 为何还买?吉利李书福:建议大家买国产新能源汽车
2月XGP最佳游戏玩家投票:俄罗斯3A大作《原子之心》荣获第一
A/B 实验避坑指南:为什么不建议开 AABB 实验
观速讯丨.NET7依赖注入
3月6日译名发布:乔治·桑托斯
黄鳝吃什么东西
看点:699元 小米米家首款智能钢琴灯发布:雷达感应自动开关灯
天天微资讯!降低水产品检测标准!日本坚决核污水排海 100%移除放射性元素做不到
专家呼吁每天省杯咖啡提前规划养老:背后商业版图显现 网友无语满嘴跑火车
一个摄像头就能让虚拟人唱跳rap:抖音即可玩
有哪些值得收藏的运营思维导图?
环球速看:在工作中最容易犯的3个大忌
环球头条:1-基础入门
每日热门:网络安全(中职组)-B模块:Windows操作系统渗透测试
当前资讯!你也能成为“黑客”高手——趣谈Linux Shell编程语言
每辆都是碰撞测试车 特斯拉全球首创真实碰撞测试系统
当前热点-惊蛰习俗有哪些?专家科普:吃梨、吃“懒龙”了解下
【世界报资讯】33万买奥迪A7L!上汽回应“内购价最高优惠16万”:正严查信息外泄
马斯克:曾对加密货币感兴趣 现在钟情于AI
《数据万象带你玩转视图场景》第一期:avif图片压缩详解
每日热讯!计算两个字符串的相似度
2023年兔年金银币价格表(2023年03月06日)
199元!小米推出米家分体露营灯:Type-C接口 满电亮100小时
高速公路“见缝插针”超车致事故 司机:我莽撞了
每日动态!魅族史上最大规模!魅族20系列发布会定点上海梅赛德斯奔驰文化中心
全球滚动:预计上涨0.16元/升!国内油价将于17日24时起再调整
全球视讯!《卧龙:苍天陨落》捏人系统受盛赞 胸部拉到最大也不违和
关于情侣的四字成语有哪些?关于情侣个性签名大全
专业人才入库证书有什么作用?从专业人才走向管理心得体会
花羊羊是谁的妈妈?花羊羊为什么没和村长在一起?
海麻线是什么东西?海麻线的营养价值及功效
MySQL安装入门第一篇
【SpringBoot】AOP默认的动态代理
前端设计模式——工厂模式
电脑怎么设置休眠模式?休眠和待机有什么区别?
洗衣机不进水是哪里的问题?洗衣机不进水怎么处理?
电脑mac地址怎么更改?电脑mac地址查询方法
网件路由器怎么恢复出厂设置?网件路由器哪款性价比高?
全球头条:鼠标是无法识别的usb设备_鼠标成为无法识别的USB设备 怎么办
苹果笔记本好用吗?苹果笔记本换电池需要多少钱?
百度地图怎么看实时街景?百度地图怎么看历史导航轨迹?
全球短讯!极氪汽车被指销售欺诈 有车主坐在体验店门口集体维权
雷军大会发言:小米汽车预计明年上半年量产 一定把车造好!
极致豪华!长城魏牌蓝山内饰官图发布:35万选它还是理想L8
每日资讯:一文看懂2023年CPU如何选:AMD锐龙7000X3D游戏性能封神
阿里拍卖上线湾流G450公务机!博主:近几年最具性价比的一架
全球观天下!055期暗皇福彩3D预测奖号:组选6码参考
焦点报道:【个人杂谈】大体重程序员如何减肥?(个人总结向)
Python、C++、Swift或任何其他语言会取代Java吗?为什么?
速递!koreanDollLikeness_v10模型下载及使用
# 前端周刊:2023-2 期
环球今亮点!Java Struts2系列的XSS漏洞(S2-002)
天天视点!被雷电瞄准时身体会有预兆:如果在乌云下毛发突然竖起 赶紧躲避
世界热议:全球一半人口2035年可能超重:总量超过40亿
全球资讯:石家庄买一根火腿肠就能免费坐地铁 官方回应:鼓励绿色出行
一本院校招聘会现多家酒店招洗碗工引热议 最低工资2千多:官方回应
焦点报道:又一起!美国一小型飞机坠毁后起火 已致1死2伤
聊一聊如何用SonarQube管理.NET代码质量
语义分割评价指标(Dice coefficient, IoU)
(数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述
天天通讯!Spring Boot 实现装饰器模式,真香!
观天下!密密麻麻!地震后松毛虫大规模入侵土耳其:场面惊悚 令人不适
广东一特斯拉连撞多车冲毁店门现场视频:网友看完称刹车灯亮了 油门当刹车
世界热文:75岁老人中风 好友发现运动步数为0报医:最终脱离危险
全球首个财务自由大学诞生 美国普林斯顿大学2600亿财富养活自己
大神教你在 Linux 中查看你的时区
世界今头条!“帮忙资金”助基金保壳
当前聚焦:工作人员帮游客捡手机被4只幼虎围观 网友:幸亏是“幼儿园”
全球快看点丨董明珠:中国制造业要想成为世界级 必须在创新上下功夫
摄影师把iPhone塞水下拍美景 咕噜咕噜一阵冒泡 Siri:这把憋气局
全球速读:吴青峰发文请大家别听苏打绿的歌:母带仍被非法利用 还听是助纣为虐
学弈这篇文言文是什么意思
环球快报:读Java性能权威指南(第2版)笔记08_即时编译器中
仅1/3美国人能轻松支付400美元应急费用:信用卡违约率激增
可视化调试某个js对象的属性UI插件 class HTUI
每日速递:一进群就水群?试试这个水群拦截工具
世界快讯:裁员70% 关停两个办公点:自动驾驶卡车公司Embark倒闭边缘