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

原文鏈接
https://blog.stylingandroid.com/downloadmanager-part-2/
安卓開發入門之系統下載管理工具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-第一部分》中,展示了使用DownloadManager來下載文件的詳細過程。然而,還有許多細節值得我們去探索,本文將一 一展開。

我們首先看看系統通知欄的內容,它包括文件名和剩餘時間。
通知欄

這是默認的通知欄,好看不?我也不知道,如果我們需要自定義通知欄,下面內容可看好了。

設置何時顯示通知欄:在我們將DownloadManager.Request對象放入DownloadManager隊列時調用setNotificationVisibility()方法(API11,API9調用setShowRunningNotification())。
如果我們獲取了DOWNLOAD_WITHOUT_NOTIFICATION 權限,有可能禁止彈出下載通知欄。

設置顯示的文件名:DownloadManager.Request. setTitle()
設置顯示的描述內容:DownloadManager.Request.setDescription()
代碼如下:

    void download(Uri uri) {
        if (!isDownloading()) {
            register();
            DownloadManager.Request request = new DownloadManager.Request(uri);
            request.setTitle("My hovercraft is full of eels");
            request.setDescription("I am no longer infected");
            downloadId = downloadManager.enqueue(request);
        }
    }

個人建議,最好不要設置描述內容,因爲這會覆蓋掉剩餘時間的顯示,後者往往更有價值。看看覆蓋後的效果:
這裏寫圖片描述

如果服務端需要指定的HTTP頭,比如說SessionID,只需設置 DownloadManager.Request的addRequestHeader()方法。
如果下載的數據太大可能會影響用戶設備的內存空間。DownloadManager.Request 的許多方法能夠限制下載大小。默認設置是無限制,所以我們最好設置一個下載上限。
DownloadManager.Request的setAllowedOverRoaming()限制漫遊下載。
DownloadManager.Request的setAllowedNetworkTypes()(API16以後調用setAllowedOverMetered())過濾掉特殊類型的網絡。

設置下載的時候內容是否對操作系統可見。
將request放入隊列之前調用DownloadManager.Request的allowScanningByMediaScanner()設置允許系統媒體掃描下載的內容。比如說,如果我們進行了該項設置,當我們下載完成一張圖片以後並且媒體掃描器掃描之後,該圖片會出現在系統相冊裏。

DownloadManager.Request的setVisibleInDownloadsUi()方法設置了下載內容和狀態是否對系統自帶的下載app可見。

最後,我們能夠設置下載文件存到設備中的地方。默認下載存放到分配給我們app私有(正如我們上一篇文章中看到的儘管能夠分享到其他app)的系統區域。這有一點不好就是當系統釋放內存空間的會被系統刪掉,爲了避免被刪掉可以調用setDestinationInExternalFilesDir(),該方法將下載內容存儲到存儲卡上屬於我們app的私有區域,因爲該區域對媒體掃描器不可見的。如果想設置下載的內容對媒體掃描器可見,調用setDestinationInExternalPublicDir()替代setDestinationInExternalFilesDir()方法,該方法將下載內容保存到存儲卡的public區域。然而,將下載內容存儲在存儲卡的public區域(適用於系統的所有app)對於分享到其他app這點有影響。這點我們將在下一篇文章中討論。

我們能對每一次下載進行設置,但是,我們仍然能夠將一些通用的設置應用到所有的下載,我們將在下一篇文章中討論。

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

原文鏈接
https://blog.stylingandroid.com/downloadmanager-part-2/
安卓開發入門之系統下載管理工具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

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