這裏後如何停止正在運行的下載情況:系統重啓
- 我開始下載
- 我重啓設備(測試應用程序的健壯性)
- 我使用啓動接收通知重啓
中的onReceive方法我稱之爲clearDownloadsAfterReboot()方法:
@Override public void onReceive(final Context context, Intent intent) { clearDownloadsAfterReboot(context); }
的clearDownloadsAfterReboot()方法被調用,並嘗試刪除下載像這樣:
private void clearDownloadsAfterReboot(final Context context){ //Added delay to make sure download has started new Handler().postDelayed(new Runnable() { @Override public void run() { DownloadManager manager = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE); DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById (DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PENDING|DownloadManager.STATUS_RUNNING|DownloadManager.STATUS_PAUSED); Cursor c = manager.query(query); // -------> c.getCount() returns 0 despite the download being visible while(c.moveToNext()) { //This never executes because c has a count of 0 int removedInt = manager.remove(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID))); } } }, 45000); }
光標返回0,所以remove()方法永遠不會被調用,但是,我可以看到下載的運行狀態欄,因此至少有1個下載正在運行。
我一言以蔽之問題:如何停止在重啓後運行下載?而且,爲什麼當下載正在運行時,manager.query()方法返回的結果爲0的遊標?
我知道還有其他關於停止下載的問題,但是這些都無法解決我的問題。
在此先感謝。
您正在使用setFilterById()方法傳遞來自DownloadManager的狀態組合,當該方法實際上期望枚舉下載ID時。因此,請傳遞下載ID或使用setFilterByStatus()方法與當前使用的標誌組合。 – Luksprog
感謝您的回覆。我認爲你是對的。現在我已經將方法更改爲setFilterByStatus(),光標將返回正確的下載量。而且,它確實顯示下載已停止(它保持在0%),但是,「正在進行下載」的通知在通知托盤停止後不會從通知托盤中清除。你知道爲什麼會發生嗎?再次感謝 –