【发布时间】:2012-12-13 22:39:15
【问题描述】:
我正在使用 DownloadManager 在我的应用程序中下载一堆文件。我无法弄清楚如何取消已由 downloadManager 排队的下载。
有两种可能: 一种。用户可以通过在通知栏中单击它来手动取消它。 湾。通过代码取消并删除下载。
我定义了以下接收器。
<receiver
android:name=".DownloadStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
<action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
</intent-filter>
</receiver>
在接收器中
if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
Constants.showLog(TAG, "Notification clicked");
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
DownloadManager dm =(DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
dm.remove(downloadId);
}
有什么见解吗?
【问题讨论】:
-
根据文档,
remove()应该可以工作。当然,在下载完成之前,您似乎不会调用remove()。这就像在马跑了之后锁住了谷仓。 :-) -
我会实现自己的下载工作流程,因为内置的下载管理器有问题,不能在旧设备上运行。
-
@CommonsWare:单击通知栏时我正在调用删除。我假设通知点击事件来自下载是否完成。
-
击败我。我没有玩太多的通知点击。尝试在您的控制范围内尝试使用
remove(),例如Button或操作栏项目。另外,您是否确认downloadId会返回一个与您的原始请求相匹配的值? -
我修好了。对我来说,我正在下载多个文件,它们在同一个进度条上聚集在一起。所以现在只要我收到点击广播的通知,我就会查询并遍历 Id 并将它们一一删除。作品。我不确定的唯一问题是它是否还会删除我的应用程序未启动的下载。
标签: android android-download-manager