天天看點

Android實作檔案下載下傳

Android實作檔案下載下傳

    • 一、目标
    • 二、體驗位址
    • 三、功能設計
    • 四、實作方案
      • 1. DownloadManager
      • 2. OkHttp
    • 五、組合起來
    • 六、Finally

一、目标

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

~明月幾時有~把酒問青天~