安卓開發入門之系統下載管理工具DownloadManager-第三部分(翻譯)

原文鏈接
https://blog.stylingandroid.com/downloadmanager-part-3/
安卓開發入門之系統下載管理工具DownloadManager-第一部分
http://blog.csdn.net/zhangxiangliang2/article/details/73691449
安卓開發入門之系統下載管理工具DownloadManager-第二部分
http://blog.csdn.net/zhangxiangliang2/article/details/73693134
安卓開發入門之系統下載管理工具DownloadManager-第三部分
http://blog.csdn.net/zhangxiangliang2/article/details/73695167
前兩篇文章介紹DownloadManager 的主要內容,另外還有一個重要的知識點就是其在設備上的UI表現。我們都知道下載時系統通知欄會顯示下載信息,除此之外還有下載管理app,通過此app,用戶能夠管理下載的內容。該app的尤其重要,因爲當我們的app將下載內容存放在我們自己的數據區域以外並且用戶卸載掉我們的app後,這些下載內容不會被自動刪除。如果我們使用DownloadManager下載文件,下載內容會自動顯示在下載管理app。正如下圖所示:
image

然而,當我們使用獨立下載時,我們仍然能夠通過DownloadManager的addCompletedDownload()方法將下載內容添加到下載管理app。該方法有兩個參數,第一個參數從API12開始引入,第二個參數(API24引入)包含下載內容中URI屬性和HTTP中URI。但是注意,要想此方法生效,我們必須將下載內容存儲在public區域,而不能存儲在app私有區域。

在第一篇文章《安卓開發入門之系統下載管理工具DownloadManager-第一部分 》中闡述了下載完成後,我們可以通過DownloadManager 獲取下載內容的屬性信息,比如說MIME type。當然還有許多其他的屬性,比如下載狀態和內容的大小。
第一篇文章也展示了通過getUriForDownloadedFile()方法獲取URI,和MIME type一起調用外部的PDF閱讀器。這讓我們意識到,下載內容被存儲在我們app的私有數據區域和擁有下載內容schema的URI,我們通過DownloadManager創建ContentProvider 將URI暴露給外部app。

將下載內容存儲在合適的位置是個值得思考的問題。由於不同app有不同的實際需求,所以沒有唯一的正確答案。
假如下載內容比較小,並且只被我們的app自己使用,存儲在私有數據區域比較合適。
對於比較大的下載內容,並且只被我們的app自己使用,存儲在存儲卡的私有數據區域比較合適(此操作不需要WRITE_EXTERNAL_STORAGE 權限)。通過方法setDestinationInExternalFilesDir()。
最後如果下載內容需要具備public屬性(比如說媒體掃描器掃描後將圖片顯示在系統相冊),存儲在存儲卡的public區域比較合適(此操作需要WRITE_EXTERNAL_STORAGE 權限)。通過方法setDestinationInExternalPublicDir()。

源碼下載
https://github.com/StylingAndroid/DownloadManager/tree/Part3

原文鏈接
https://blog.stylingandroid.com/downloadmanager-part-3/
安卓開發入門之系統下載管理工具DownloadManager-第一部分
http://blog.csdn.net/zhangxiangliang2/article/details/73691449
安卓開發入門之系統下載管理工具DownloadManager-第二部分
http://blog.csdn.net/zhangxiangliang2/article/details/73693134
安卓開發入門之系統下載管理工具DownloadManager-第三部分
http://blog.csdn.net/zhangxiangliang2/article/details/73695167

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章