簡體   English   中英

Android DownloadManager

[英]Android DownloadManager

我正在使用Android DownloadManager下載XMB某些文件,如果DownloadManager完成下載,它將在正常情況下發送動作android.intent.action.DOWNLOAD_COMPLETE broadcast

我的問題是,如果兩者之間失去互聯網連接該怎么辦。 它會發送廣播嗎? 如果服務器停止提供DownloadManager服務,則兩者之間的情況相同。 也許是愚蠢的問題,我的文件很小,所以我無法測試這種情況。

有人可以告訴我DownloadManager在這種情況下會做什么嗎?

廣播將被發送。 您需要檢查DownloadManager的狀態以確定它是否成功。 例如:

private DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
            Query query = new Query();
            query.setFilterById(enqueue);
            Cursor c = dm.query(query);
            if (c.moveToFirst()) {
                int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                    // handle data
                } else if (DownloadManager.STATUS_FAILED == c.getInt(columnIndex)) {
                    // handle error
                }
            }
        }
    }
};

有關完整示例,請參見: 此鏈接 有關確定故障原因的方法,請參閱此鏈接

禮貌: Android DownloadManager示例

我僅注冊DownloadManager.ACTION_DOWNLOAD_COMPLETE廣播的接收器。 僅當下載成功完成時才調用

遵循這三個步驟

創建一個BroadcastReceiver,如下面的代碼片段所示。在接收器內部,我們只需將接收到的下載ID與入隊下載進行匹配,檢查接收到的廣播是否是我們的下載。

private BroadcastReceiver onDownloadComplete = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           //Fetching the download id received with the broadcast
           long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
           //Checking if the received broadcast is for our enqueued download by matching download id
           if (downloadID == id) {
               Toast.makeText(MainActivity.this, "Download Completed", Toast.LENGTH_SHORT).show();
           }
       }
   };

創建BroadcastReceiver后,您可以在活動的onCreate方法中注冊ACTION_DOWNLOAD_COMPLETE。

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       registerReceiver(onDownloadComplete,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

   }

在onDestroy中注銷BroadcastReceiver也是很重要的。 這樣可以確保您僅在活動處於活動狀態時才收聽此廣播

@Override
  public void onDestroy() {
      super.onDestroy();
      unregisterReceiver(onDownloadComplete);
  }

完整的例子在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM