Android实现文件下载

    • 一、目标
    • 二、体验地址
    • 三、功能设计
    • 四、实现方案
      • 1. DownloadManager
      • 2. OkHttp
    • 五、组合起来
    • 六、Finally

一、目标


实现新版本安装包下载。

二、体验地址

神马笔记最新版本下载:【神马笔记 版本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

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

更多相关文章

  1. Android使用Ant技术打包详解
  2. Android(安卓)报错 “程序包R不存在...!”
  3. Android里面classes.dex如何生成
  4. 【Android】【opencv】实现摄像头拍照和录像
  5. Android开发之数据存储全方案
  6. Android数据储存——文件储存
  7. AndroidStudio上面最好用的插件
  8. android NDK JNI so文件的制作和使用
  9. 修改Android镜像文件 ramdisk.img、system.img、userdata.img获

随机推荐

  1. php本地环境搭建和变量类型
  2. SQLite与ContentProvider)
  3. android studio 自定义路径安装报错"You
  4. MVP和MVC的区别
  5. android设置窗口全屏
  6. android 关于paint的设置
  7. Android(安卓)Volley框架详解
  8. Android(安卓)输入法键盘遮挡控件问题的
  9. Android(安卓)Home 长按键处理
  10. Android(安卓)中文API (92) ―― MenuInfla