如何在系统重启后停止 运行 下载
How to stop a running download after a system reboot
情况如下:
- 我开始下载
- 我重启设备(以测试应用程序的健壮性)
- 我使用引导接收器接收重启通知
在 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);
}
游标 returns 0 所以 remove() 方法永远不会被调用,但是,我可以在状态栏中看到下载 运行 所以至少有1 下载 运行.
我的问题简述: 如何在重启后停止 运行 下载?而且,为什么 manager.query() 方法 return 游标在下载 运行 时结果为 0?
我知道还有其他关于停止下载的问题,但这些都无法解决我的问题。
提前致谢。
此答案的第一部分归功于@Lukesprog
我需要使用 setFilterByStatus()
而不是 setFilterById()
。交换这两种方法后,我能够成功停止下载,并且 manager.query() 方法返回包含正确下载量的光标。
但是,由于某些原因,显示下载进度的通知在下载停止后并没有清除。为了清除通知,您需要调用 manager.remove(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID)));
两次 。
情况如下:
- 我开始下载
- 我重启设备(以测试应用程序的健壮性)
- 我使用引导接收器接收重启通知
在 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); }
游标 returns 0 所以 remove() 方法永远不会被调用,但是,我可以在状态栏中看到下载 运行 所以至少有1 下载 运行.
我的问题简述: 如何在重启后停止 运行 下载?而且,为什么 manager.query() 方法 return 游标在下载 运行 时结果为 0?
我知道还有其他关于停止下载的问题,但这些都无法解决我的问题。
提前致谢。
此答案的第一部分归功于@Lukesprog
我需要使用 setFilterByStatus()
而不是 setFilterById()
。交换这两种方法后,我能够成功停止下载,并且 manager.query() 方法返回包含正确下载量的光标。
但是,由于某些原因,显示下载进度的通知在下载停止后并没有清除。为了清除通知,您需要调用 manager.remove(c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID)));
两次 。