【问题标题】:Send a variable from a "Activity" to "BroadcastReceiver."将变量从“Activity”发送到“BroadcastReceiver”。
【发布时间】:2015-05-27 19:11:52
【问题描述】:

我需要将一个变量从 Activity 发送到在 Manifest 上注册的 BroadcastReceiver

我的场景:

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

在我的AndroidManifest 中,我使用过滤器android.intent.action.DOWNLOAD_COMPLETE 注册了一个BroadcastReceiver,当我的BroadcastReceiver 被调用时,我想将此寄存器从“PENDENT”更改为“DOWNLOADED”。

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

提前致谢!

【问题讨论】:

    标签: android broadcastreceiver download-manager


    【解决方案1】:

    您应该查看在入队时由 downloadManager 返回的下载的Id。您可以执行以下操作:

    long downloadId = manager.enqueue(request);
    

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多