Android BroadcastReceiver安装后无法正常工作

时间:2011-04-25 04:16:10

标签: android broadcastreceiver

问候!我正在研究一个应用程序,它有一个侦听“android.intent.action.PHONE_STATE”的BroadcastReceiver,它在手机状态改变时运行(我在检测到来电时用它来运行代码)。这在我的大多数测试手机上运行良好,但有些似乎根本没有触发接收器。但是,一旦这些问题手机重新启动,一切都会按预期工作。

在BroadcaseReceiver可以选择任何东西之前,是否需要重新启动这些手机?有没有办法可以检测它是否没有运行并手动“启动”BroadcaseReceiver?我很难过,所以我很感激你提供的任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:16)

要扩展此问题:从Android 3.1开始,已安装的应用程序处于“已停止”状态。要从已停止的应用程序调用BroadcastReceiver,需要额外的broadcast intent flag

更多详情:http://developer.android.com/sdk/android-3.1.html#launchcontrols

我在我的应用程序中创建了FLAG_INCLUDE_STOPPED_PACKAGES常量(= 32)(对于Android 3.1之前的版本)并将其添加到我的广播意图intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);

答案 1 :(得分:3)

  

在BroadcaseReceiver可以选择任何东西之前,是否需要重新启动这些手机?

假设您的应用程序在BroadcastReceiver广播的清单中注册了PHONE_STATE,它应该在安装后立即生效。如果没有,那对我来说感觉就像一辆车。

  

有没有办法可以检测它是否没有运行并手动“启动”BroadcaseReceiver?

不,主要是因为它通常没有运行,即使事情正常。您BroadcastReceiver匹配时会创建Intent的实例,<intent-filter>会调用onReceive()BroadcastReceiver会被处置一次onReceive()返回。