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的動作,
  而這樣我們傳入的檔案名稱就與下載下來的檔案名稱不同了,
  所以才會在下載完成後再做一次這樣的動作取的正確檔案名稱。

 
arrow
arrow
    文章標籤
    android downloadmanager
    全站熱搜

    獅子毛容容 發表在 痞客邦 留言(0) 人氣()