gpt4 book ai didi

android - 是否可以取消/停止使用 DownloadManager 开始的下载?

转载 作者:IT老高 更新时间:2023-10-28 23:08:46 25 4
gpt4 key购买 nike

我正在使用 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);

}

有什么见解吗?

最佳答案

您可以通过 DownloadManager 调用其 remove(long...) 方法来取消下载。为此,您需要下载的 ID。根据我的经验,基本上有两种可靠的方法来获得它:

  1. 记住enqueue(DownloadManager.Request)方法的返回值。
  2. 通过 query(DownloadManager.Query) 方法查询 DownloadManager 以获取下载。然后从返回的 Cursor 中检索 ID,它们存储在名为 DownloadManager.COLUMN_ID 的列中。

广播接收器

根据我的经验,通过 BroadcastReceiver 为 Action android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED 检索下载 ID 是不可靠的(尽管总是发送广播)。

  1. 从额外的 DownloadManager 获取下载 ID。 EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS 无法正常工作。在某些设备上,它总是返回 null。如果它在某些设备上返回某些内容,则它是首先开始下载的 ID。如果第一次下载完成/取消,则返回 null 以通知剩余下载。
  2. 从额外的 DownloadManager.EXTRA_DOWNLOAD_ID 获取值不适用于此操作。

在广播中获取 ID 以进行操作 android.intent.action.DOWNLOAD_COMPLETE 似乎可靠。您必须从额外的 DownloadManager.EXTRA_DOWNLOAD_ID 中获取它。请注意,广播不仅会在下载完成时发送,还会在您取消下载调用 remove() 时发送。

注意:下载有时会在一个通知中分组,有时会创建多个通知。我无法弄清楚通知何时分组和不分组的条件。它似乎取决于许多因素,例如操作系统版本、设备、下载标题……而且总的来说似乎相当不可预测。

注意:我测试了你是否可以取消其他应用程序的下载,但似乎不能。即使 ID 是在所有应用程序中唯一的数据库 ID。调用 remove() 不会取消其他应用的下载。

关于android - 是否可以取消/停止使用 DownloadManager 开始的下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com