作者:爱好装逼的 梁飞

“强制升级”会中断用户操作,阻碍正常使用,看似是一个不光彩的行为,但是智者千虑必有一失,我们无法保证 App 的正确性,在某些紧急情况下,强制升级还是非常必要的,而且接入的时间越早越好。

有赞微商城 App 早期版本只提供了一个更新提示的对话框,并不会强制用户更新。随着后端网关升级,一些老的服务需要下线,但是新版本到达率并不理想,继续维护老接口带来一定成本,而且新功能也无法触及用户。

为了提升版本到达率,我们重新梳理了强制升级的逻辑。

升级过程中首先要保证 apk 的下载成功率,下载完成之后要及时弹出安装页面,为了防止下载失败,也要提供市场下载的选项,这样一定程度上也能保证升级之后渠道的一致性。

  • 更新对话框需要展示标题、内容和动作按钮。
  • 状态栏下载通知需要展示应用名字和描述。

构造参数

业务方需要提供的参数:

public 

使用 DownloadManager 下载 apk

为了提高下载成功率,我们使用了系统 Service - DownloadManager,因为是独立进程,不会增加 App 占用的系统开销。

如果 DownloadManager 被系统禁用,那直接跳转到浏览器去下载。

private 

注册监听下载完成的 Receiver

我们通过一个全局的 Receiver 来接收下载完成的广播,这样即使 App 进程被杀死,依然可以弹出安装界面。

<receiver

接收到广播之后,弹出安装界面。

private 

注意此处有坑,在 SDK >= 24 的系统中,Intent 不允许携带 file:// 格式的数据,只能通过 provider 的形式共享数据。

所以我们还需要注册一个 FileProvider。

FileProvider 在 Android N 上的应用​zhuanlan.zhihu.com

<provider

${applicationId}$ 是 AndroidManifest.xml 中的占位符,gradle 会进行替换。

android:authorities="${applicationId}.provider"

对应 Java 代码:

FileProvider

注意:Java 代码中 getPackageName() 的返回值是 ApplicationId,具体可参考 ApplicationId 与 PackageName 的区别。

完整版代码:LyndonChin/ZanAppUpdater
原文链接:Android 强升逻辑和实现

我们积极拥抱新技术,不给自己设边界,勇于跳出舒适区
iOS/Android 开发可投简历至 liangfei@youzan.com(微信:feelang )

java实现断点续传_Android 强升逻辑和实现相关推荐

  1. 用 Java 实现断点续传 (HTTP)

    断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已. 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu ...

  2. java数字音频最强教程之如何检测一段音频中是否有声音

    声音检测 随着人工智能的发展,机器视觉,机器可视化也变的越来越完善,但是声音这块分析资料却比较少,有时候需要去检测一段视频或者音频中是否有声音.在某些场景中需要判断有声音则抓拍录制,当然这里只是先初步 ...

  3. java文件断点续传下载或视频播放

    java文件断点续传下载或视频播放 代码 代码 @GetMapping("/download")public void download(Long id, HttpServletR ...

  4. Java JSON library哪家强?

    Java JSON Library benchmark 测试 今天同事之间的一个讨论,引起了我的好奇,Java JSON libary哪家强? 搜索了一番,看到一篇文章 http://blog.tak ...

  5. Java知识体系最强总结(2020版) 传送门

    本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新.也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读 ...

  6. Java知识体系最强(转载)

    Java知识体系最强总结(2020版) ThinkWon 2019-12-18 10:09:56 425801 已收藏 26016 分类专栏: 程序员的一些思考 文章标签: Java基础知识 并发编程 ...

  7. 【转】Java知识体系最强总结(2020版)

    本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新.也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读 ...

  8. 【转载】Java知识体系最强总结(2020版)

    原文链接.转载 更新于2020-03-14 18:00:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新.也算 ...

  9. Java文件断点续传

    Java文件断点续传 断点续传实现思路:将大文件均分成几块后,每个线程分别处理一块数据的读取和写入.每次写入都要更新记录的日志文件,断网或暂定后重新开始传输时,根据日志文件的信息,可以接着读取写入数据 ...

最新文章

  1. php中查询结果展示
  2. PostgreSQL在何处处理 sql查询之十二
  3. Linux下查看在运行进程的命令
  4. PM——【1】维护功能位置主数据
  5. 《关键对话》学习总结
  6. boost::hana::just用法的测试程序
  7. linux中的bash shell的特性
  8. 正则替换让一部分内容保持不变
  9. 好好说说Java中的常量池之Class常量池 1
  10. 微信语音怎么转发给别人听_微信分付怎么邀请别人 微信分付如何才能被邀请开通...
  11. ajax div iframe,【转】用AJAX模仿IFRAME 在指定DIV打开页面
  12. Symbian编程总结-基础篇-描述符(2)-TDesC8与TDesC16之间的互转
  13. 我一直以为做知识付费的老师是非常赚钱的
  14. 前端05.js入门之BOM对象与DOM对象。
  15. 06 外键的三种分类
  16. 【C语言】俄罗斯方块的源代码
  17. 【精品整站】WordPress自适应美女写真网站源码/美图整站源码带数据/安装即可运营
  18. Windows 10虚拟机Vmware 安装 黑苹果macos10.14
  19. 旷视 2019 春季算法实习生面试总结
  20. SSH信任关系配置(免密码登录)

热门文章

  1. 移动app部分机型无法唤起h5支付宝支付_用这段代码对App说:喂,醒醒!App,到你出场了!...
  2. c/s三层结构信息系统的三个层次_网络资讯:三层架构是什么
  3. oracle 磁盘不分区吗,LINUX停ORACLE软件、数据文件等所在的磁盘分区空间不足的解决思路...
  4. python parser count_8 个 Python 实用脚本,早掌握早下班!
  5. 怎么用计算机截图快捷键,电脑怎么截图截屏 电脑截图的快捷键是什么
  6. vscode安装python插件失败_vscode插件安装失败的解决方案
  7. vue-cli搭建的项目打包之后报“资源路径错误资源文件找不到“
  8. python_数据库连接之mysql
  9. hdu 2275 Kiki Little Kiki 1 水题
  10. Git工作流指南:集中式工作流