将变量从 "Activity" 发送到 "BroadcastReceiver."

Send a variable from a "Activity" to "BroadcastReceiver."

我需要将变量从 Activity 发送到在清单上注册的 BroadcastReceiver

我的场景:

我有一个用户可以下载的文件列表,当他点击应用程序时调用 DownloadManager,并在数据库中放置一个标志“PENDENT”。此列表由 Activity

管理

在我的 AndroidManifest 中,我用过滤器 android.intent.action.DOWNLOAD_COMPLETE 注册了一个 BroadcastReceiver,当我的 BroadcastReceiver 被调用时,我想从 "PENDENT" 更改这个寄存器到“已下载”。

观察:可能是我的方法不好,如果是这样,我接受建议。

提前致谢!

BroadcastReceiver 收到 Intent。变量可以包含在 Intent.

这是创建后台服务和传递 Intent 的指南。 https://developer.android.com/training/run-background-service/create-service.html

由 Activity 本身存储和管理您的文件列表可能不是最好的主意。将数据列表保存在与 Activity 和 BroadcastReceiver 分开的某些 class 中可能更安全——可能是某种将数据保存到文件系统的 IntentService。然后你的 Activity 和 BroadcastReceiver 都可以使用 IntentService 来管理数据。

你应该看看 downloadManager 在入队时返回的 downloadedId。你可以这样做:

long downloadId = manager.enqueue(request);

然后您可以将 downloadId 存储在您的数据库中,并且您可以通过查询您的数据以获取来自 onReceive 的 IntentExtras 的 downloadedId 来获取下载了哪个文件。您可以使用以下方式获取额外信息:

Bundle extras = intent.getExtras();
Long downloaded_id = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID);

希望对您有所帮助。