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
~明月幾時有~把酒問青天~