情况如下:
在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的游标?
我知道还有其他关于停止下载的问题,但这些问题无法解决我的问题。
提前致谢。
答案 0 :(得分:1)
这个答案的第一部分归功于@Lukesprog
我需要使用setFilterByStatus()
代替setFilterById()
。交换这两种方法后,我能够成功停止下载,manager.query()方法返回一个包含正确下载量的游标。
但是,出于某种原因,在下载停止后,显示下载进度的通知未明确。要清除通知,您需要拨打manager.remove(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID)));
两次。