close
DownloadManager是Android提供的下載檔案的方式,
而且可以在系統的下載歷程記錄中看到,
如果是用一般的file方式儲存,
則不會再下載歷程中看到,
如果想要在dropbox...等地方上傳檔案,
使用file形式儲存的檔案容易找不到。
DownloadManager的主要程式碼:
DownloadManager downloadManager = (DownloadManager) mContext
.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, fileName);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setMimeType(mimeType);
myDownloadReference = downloadManager.enqueue(request);
setDestinationInExternalPublicDir:
是指檔案儲存的位置及檔名, 若使用Environment.DIRECTORY_MUSIC , Environment.DIRECTORY_PICTURES...等, 會自動幫我們將ContentValues設定相對應的資料, 如果要設定其他位置,則需要自行將影片,相片...加入到ContentValues。 如果設定其他位置,只需要給根目錄後的資料夾名稱, 例如:想下載到abc資料夾,而abc資料夾位置在/storage/emulated/0/abc, 我們只需要給abc,其他的都不用給, 換句話說Environment.getExternalStorageDirectory().getAbsolutePath()這都不用。
setNotificationVisibility:
設定下載時在Notification是否顯示通知 VISIBILITY_VISIBLE:只有在下載時在Notification顯示下載中 VISIBILITY_VISIBLE_NOTIFY_COMPLETED:下載中及下載完成皆再Notification顯示通知 VISIBILITY_HIDDEN:在Notification都不顯示 VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION:
只有在完成的時候顯示,且需要搭配addCompletedDownload使用
setMimeType:
這是媒體類型,例如GIF圖檔(.gif)是image/gif, 如果沒有設定的話,點選下載完成的Notification在很多手機上都會無法開啟, 若有設定VISIBILITY_VISIBLE_NOTIFY_COMPLETED
或VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION, 記得也要設定setMimeType。
監聽BroadcastReceiver:
註冊系統通知來做相對應處理 ACTION_DOWNLOAD_COMPLETE:下載完成 ACTION_NOTIFICATION_CLICKED:點擊通知欄
下載完成後拿取檔案名稱:
如果要在下載完成後拿檔案名稱處理事情,可以這樣取得:
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(reference);
Cursor cur = downloadManager.query(query);
int index = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (cur.moveToFirst()) {
if (cur.getInt(index) == DownloadManager.STATUS_SUCCESSFUL) {
String title = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_TITLE));
}
}
●為何要這麼麻煩再拿一次檔案名稱呢?
因為使用DownloadManager下載時,如果選擇的資料夾有相同檔案名稱,
DownloadManager會自動在後面幫我們做加1的動作,
而這樣我們傳入的檔案名稱就與下載下來的檔案名稱不同了,
所以才會在下載完成後再做一次這樣的動作取的正確檔案名稱。
文章標籤
全站熱搜
留言列表