【问题标题】:Broadcast Receiver not getting the broadcast if app is not started如果应用程序未启动,广播接收器不会收到广播
【发布时间】:2013-12-29 02:59:20
【问题描述】:

我在一台设备上安装了一些 2 个应用程序。其中一个应用程序捕获 ACTION_BOOT_COMPLETED 广播,进行一些初始化并发送另一个广播(例如 MY_CUSTOM_BROADCAST)。第二个应用程序有一个广播接收器(清单中的标签提到),它监听这个自定义广播。在启动时,第一个应用程序接收到 ACTION_BOOT_COMPLETED 并成功发送自定义广播。但我的第二个应用程序的接收器似乎没有收到它。我尝试使用“am broadcast”发送自定义广播。即使这样,第二个应用程序的接收器也没有收到它。

然后我启动了第二个应用程序的主要活动,然后尝试使用“am broadcast”发送广播。然后第二个应用的接收者成功接收到它。

有人可以帮我解释为什么我的接收器在启动时没有收到自定义广播吗?我在 4.0.3 (ICS) 上运行它。

【问题讨论】:

  • 您是在代码还是清单中注册广播接收器?
  • 你如何测试广播是否被接收?
  • 我在清单中注册。我正在通过记录测试收据,并且当收到广播时,它会启动一个活动。

标签: android android-intent


【解决方案1】:

显然,在 Android 3.1+ 中,如果应用从未运行过或被强制停止,则它们处于停止状态。系统将这些应用程序排除在广播意图之外。可以使用Intent.FLAG_INCLUDE_STOPPED_PACKAGES 标志来包含它们。

http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html

http://developer.android.com/sdk/android-3.1.html#launchcontrols

另外,我认为您需要 Intent.FLAG_ACTIVITY_NEW_TASK 标志。

【讨论】:

  • 嘿@Khasm,我正在为 GCM 通知注册一个广播接收器,如果我强行杀死我的应用程序,我不会收到广播。那我该怎么做呢?
  • 有谁知道这是否仍然是真的?
  • 将 Intent.FLAG_INCLUDE_STOPPED_PACKAGES 添加到 Intent 对我来说适用于 Android 5.1.1 和 7.1.1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多