Android实现App版本自动更新

现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置界面下:

当我们点击检查更新的时候,就会向服务器发起版本检测的请求。一般的处理方式是:服务器返回的App版本与当前手机安装的版本号进行对比。

(1)如果服务器所返回的版本号大于当前App版本号那么此时手机所安装的App不是最新版。可以提示用户升级。

(2)如果不大于当前版本号,可以提示用户为最新版本:

版本升级,也分为两种处理方式:

(1)跳转到App某市场(例如:360手机助手),然后根据包名在市场定位到该App,通过市场下载更新安装。

(2)在本App中实现Apk下载,下载完成后更新安装。

本篇博客的内容将围绕如何实现Apk下载,下载完成后更新安装来展开。

下面我将内容大致分为以下几个部分:

(1)App版本检测

(2)Apk下载

(3)Apk更新安装

(4)对以上功能进行封装

基于以上4部分,我们逐一展开。

1.App版本检测:

要实现App的更新下载,前提是服务器要保存一个App的版本号(通常的方式是保存versionCode,当然你要对比versionName也没关系)。当用户去手动检测版本,或者进入首页自动检测时,第一步是需要请求服务器的版本号,拿到版本号之后与当前App版本号(当前版本号可通过PackageInfo获取)进行对比。服务器返回的版本号大于当前App版本号,证明App已经有更新,那么进入第2步。

2.Apk下载

Apk文件是保存在服务器的。我们可以通过Http流将其下载到本地手机,然后更新安装。Android中下载的方式很多种:HttpUrlConnection,Retrofit,okHttp,以及Android原生的下载工具类DownLoadManager 等等。我们采用的方式是Google推荐的下载工具类DownLoadManager。关于DownLoadManager的使用其实很简单,简单概括如下:

(1)通过getSystemService获取DownLoadManager。

(2)初始化DownLoadManager的Request,构建下载请求。

(3)调用DownLoadManager的enqueue异步发起请求,该方法返回值为标识当前下载任务的id,即downloadId。

(4)当下载完成后,系统会发出条件为android.intent.action.DOWNLOAD_COMPLETE的广播,我们可以自定义广播接受器,然后在onReceive中处理下载完成的逻辑即可。

当我们下载完成后,并没有安装。当用户再次进入App时该如何操作?

当我们在下载之前,先去指定的文件夹下查看有木有已经下载好的Apk,并且该Apk的版本是高于本App的版本,此时我们就去执行安装操作。如果上面条件不成立,此时再去执行下载操作。

3.Apk更新安装

相信大家对于如何安装一个Apk都比较熟悉吧,原理也是比较简单的。

(1)通过downloadId获取下载的Uri。

(2)将Uri设置到Intent的setDataAndType作为启动条件。

(3)调用startActivity启动对应Intent即可。

以上3步,即可完成App的更新功能。

整体的流程很清晰:

版本检测 → Apk下载 (检查是否存在未安装的Apk) → Apk安装 → 完成更新

下面,通过代码来具体分析整个流程:

关于App版本检测其实就是一个Http请求,不再多说。我们从Apk下载开始:

上面我们提到,在下载之前需要去检测是否存在已经下载的Apk。通过什么获取呢?没错,肯定是downloadId了。

1> 如果存在downloadId,那么我们通过downloadId获取当前下载的状态status。status分为成功,失败两种状态。

(1)当status为成功状态时,即已经下载完成,我们就通过downloadId获取下载文件的Uri。然后可以通过Uri获取PackageInfo,与当前App进行包名和版本号的对比,当包名相同,并且当前版本号是小于下载的Apk版本号两个条件同时成立时,直接执行安装操作。否则,执行remove,通过downloadId删除下载任务以及文件,继续执行下载。

(2)当status为失败状态时,即下载未完成,我们就直接执行重新下载即可。

2> 如果不存在downloadId,即没有下载过Apk,执行下载即可。

核心代码如下:

下载完成后,系统会发出广播,在广播中,我们对比downloadId是否相同,相同情况下,直接通过downloadId获取Uri,然后跳转到安装界面,提示用户安装即可:

所以,别忘了在下载之前要先将该大喇叭(广播接受器)注册。

最后,当我们安装完成后,再次进入App,就将其已下载的Apk文件进行删除(将该方法放在onCreate生命周期中即可):

上面通过downloadApk获取下载文件的地址。downloadApk地址是在下载完成后广播接收器中保存的。

通过上面的步骤,我们就完成了App更新下载安装的全部工作。相信大家也有了更深的认识和理解。

android 系统(143)---Android实现App版本自动更新相关推荐

  1. iOS APP版本自动更新

    1.版本自动更新一般采用API对应的方式 获取当前App Store上版本号 于本地存储的版本号对比 2.由服务端返回版本控制升级(容易审核不通过) 参考地址(很详细) https://blog.cs ...

  2. Android实现App版本自动更新

    现在很多的App中都会有一个检查版本的功能.例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求.一般的处理方式是:服务器返回的App版本与当前手机安装的版本号 ...

  3. Android 系统与SDK和JDK版本对照表

    首发网址:Android 系统与SDK和JDK版本对照表_IT利刃出鞘的博客-CSDN博客 Android各版本对应的SDK版本 平台版本 SDK版本 版本名称 Android 8.0 26 Oreo ...

  4. android 服务端技术,移动应用服务器端开发(基于JSP技术)-2017 Android系统构架 Android系统构架.docx...

    Android系统构架 PAGE 1 目 录 TOC \o "1-3" \h \z \u 一.Android系统构架 1 二.Linux内核层 2 三.系统运行库层 3 (一)系统 ...

  5. 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.今天让我先来分析下升级包update.zip. 一 ...

  6. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  7. android log抓取方法,Android系统之Android抓取各种log的方法

    Android系统之Android抓取各种log的方法 2018年11月25日 | 萬仟网移动技术 | 我要评论 android之android抓取各种log的方法 1.logcat (四类log b ...

  8. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  9. 如何实现已发布app的自动更新

    要实现app的自动更新,做两件事情就可以搞定 1.获取当前手机中的app版本号 我们可以通过查询mainbundle中的获取CFBundleVersion NSDictionary *infoDict ...

最新文章

  1. 皮一皮:网络延迟的好处...
  2. HTTPS加密越来越流行,为何要加密?
  3. 大量更新后数据膨胀_段合并的原理探寻
  4. No resource found that matches the given name 'android:Widget.Material.A解决方案
  5. HD-SDI光端机有哪些优势?
  6. DB、ETL、DW、OLAP、DM、BI关系结构图
  7. php的数组操作,PHP的数组操作
  8. 简单粗暴地理解 JS 原型链
  9. html video 笔记
  10. sd卡写保护解除工具_手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)...
  11. Windows网络编程获得本机IP地址
  12. 易语言单窗口单ip软件源码_想要挣钱创收 那就用脚本操作手机群控软件啊
  13. 用ESP32打造一个物联网红外测温打卡机/春节结束急着上班?哒咩,再努力奋斗也要先测体温
  14. (C语言之复习demo_10-自我复习使用-可供参考)_if 的四种句型深入解析,附带集合文氏图详解
  15. java线程游戏之随机小球游戏V2
  16. 前端,网页设计常用色彩搭配表
  17. 区块链的奥卡姆剃刀在哪里?(1)
  18. 如何下载知网上的论文?
  19. “第一股”争夺战:每日优鲜、叮咚买菜及美菜网谁能杀出重围?
  20. 详解CAN总线:CAN总线报文格式—遥控帧

热门文章

  1. 计算机网络(八)——web的工作原理
  2. Linux内核分析 - 网络[十二]:UDP模块 - 收发
  3. ai怎么渐变颜色_你根本想不到AI的混合工具有多神奇!
  4. 【Java数据结构与算法】第十六章 图
  5. intellij idea开发工具
  6. kafka tool报错:Error fetching datea.Offset out of range
  7. python 单向链表
  8. Spark的相关概念说明和检查点机制
  9. 7 SDImageCache
  10. git tag的使用