Android实现文件下载
16lz
2021-01-26
Android实现文件下载
- 一、目标
- 二、体验地址
- 三、功能设计
- 四、实现方案
- 1. DownloadManager
- 2. OkHttp
- 五、组合起来
- 六、Finally
一、目标
实现新版本安装包下载。
二、体验地址
神马笔记最新版本下载:【神马笔记 版本2.1.0——软件更新功能.apk】
三、功能设计
- HTTP方式下载,并且支持HTTPS
- 支持断点续传
四、实现方案
1. DownloadManager
DownloadManager
是Android提供的下载服务。
调用DownloadManager
相关API非常容易实现文件下载功能。
但是,但是,但是……
经过一系列努力,兼容了Android 5.0,6.0,7.0,8.0!
最后发现,在Android 9.0完全没有效果。
参考文章:
- Android 5.0、6.0、7.0、8.0、9.0 新特性,DownloadManager踩坑记
- Download Manger not working in Android Pie 9.0 (Xiaomi mi A2)
- Android P , download does not start using download manager?
- Getting java.lang.SecurityException: DownloadManager: Neither user 10173 nor current process has android.permission.ACCESS_ALL_DOWNLOADS
- ……
既然系统的高级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
~明月几时有~把酒问青天~
更多相关文章
- Android使用Ant技术打包详解
- Android(安卓)报错 “程序包R不存在...!”
- Android里面classes.dex如何生成
- 【Android】【opencv】实现摄像头拍照和录像
- Android开发之数据存储全方案
- Android数据储存——文件储存
- AndroidStudio上面最好用的插件
- android NDK JNI so文件的制作和使用
- 修改Android镜像文件 ramdisk.img、system.img、userdata.img获