Android实现文件下载

Android实现文件下载

一、目标

实现新版本安装包下载。

二、体验地址

神马笔记最新版本下载:【神马笔记 版本2.1.0——软件更新功能.apk

三、功能设计

  1. HTTP方式下载,并且支持HTTPS
  2. 支持断点续传

四、实现方案

1. DownloadManager

DownloadManager是Android提供的下载服务。

调用DownloadManager相关API非常容易实现文件下载功能。

但是,但是,但是……

经过一系列努力,兼容了Android 5.0,6.0,7.0,8.0!

最后发现,在Android 9.0完全没有效果。

参考文章:

  1. Android 5.0、6.0、7.0、8.0、9.0 新特性,DownloadManager踩坑记
  2. Download Manger not working in Android Pie 9.0 (Xiaomi mi A2)
  3. Android P , download does not start using download manager?
  4. Getting java.lang.SecurityException: DownloadManager: Neither user 10173 nor current process has android.permission.ACCESS_ALL_DOWNLOADS
  5. ……

既然系统的高级API无法解决问题,那么就从HTTP开始,自己来实现下载功能。

2. OkHttp

基于HTTP协议,手动实现文件下载功能。

参考文章:

文章 解决问题
okhttp3.0忽略https证书 支持HTTPS
Android OkHttp中Https的处理 支持HTTPS
okhttp3下载文件检测进度与断点续传 使用OkHttp下载文件并支持断点续传

五、组合起来

类定义 介绍
RemoteManager 远程接口管理器,负责管理OkHttp,Retrofit,DownloadAgent等实例
DownloadAgent 下载功能类,负责管理多文件下载
DownloadRequest 请求类,数据类,定义下载信息
DownloadEntity 下载执行类,负责具体的文件下载任务
DownloadListener 回调接口类,与DownloadEntity配合,返回下载信息
DownloadEntry 下载数据类,保存单条下载任务信息
DownloadTable 下载数据表,管理多文件下载

虽然设计及实现上为多文件下载,当前场景下,只有下载新版本安装包一个文件。

但是下载作为一个单独的模块进行设计,必须支持多文件下载。

得益于OkHttp良好的接口设计,实现文件下载并支持断点续传,是间轻松的工作。

但必须注意下载流程,并处理好错误处理。

六、Finally

~明月几时有~把酒问青天~