[英]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
}
}
}
}
};
我僅注冊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.