问候!我正在研究一个应用程序,它有一个侦听“android.intent.action.PHONE_STATE”的BroadcastReceiver,它在手机状态改变时运行(我在检测到来电时用它来运行代码)。这在我的大多数测试手机上运行良好,但有些似乎根本没有触发接收器。但是,一旦这些问题手机重新启动,一切都会按预期工作。
在BroadcaseReceiver可以选择任何东西之前,是否需要重新启动这些手机?有没有办法可以检测它是否没有运行并手动“启动”BroadcaseReceiver?我很难过,所以我很感激你提供的任何帮助。
谢谢。
答案 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()
返回。