安装后Android BroadcastReceiver无法正常工作

4
问候!我正在开发一个应用程序,其中有一个广播接收器监听“android.intent.action.PHONE_STATE”,当电话状态改变时运行(我使用它来在检测到呼入电话时运行代码)。这在我的大多数测试手机上都很好用,但是有些手机似乎根本没有触发接收器。然而,一旦这些问题手机重新启动,一切就像预期的那样工作。
这些手机需要重新启动才能让BroadcaseReceiver起作用吗?是否有一种方法可以检测它是否正在运行并手动“启动”BroadcaseReceiver?我被难住了,所以我会感激您能提供的任何帮助。
谢谢。
2个回答

16

针对这个问题进行说明:从Android 3.1开始,已安装的应用程序处于“STOPPED”状态。要从已停止的应用程序中调用广播接收器,需要使用一个额外的broadcast intent flag来执行。

更多细节请参考:http://developer.android.com/sdk/android-3.1.html#launchcontrols

我在我的应用程序(适用于Android 3.1之前)中创建了FLAG_INCLUDE_STOPPED_PACKAGES常量(=32),并将其添加到我的广播意图中,如下所示:intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);


1
这就是每个人都在寻找的答案。如果有人不知道如何使用它:在您的GCM广播接收器中添加意图FLAG_INCLUDE_STOPPED_PACKAGES,您应该能够在您的应用程序“停止”时接收通知。 - superuserdo

3
有没有理由需要在启动BroadcaseReceiver之前重新启动这些手机?
假设您的应用程序已在清单中注册了PHONE_STATE广播的BroadcastReceiver,它应该在安装后立即工作。 如果不是这样,对我来说就像是有漏洞的ROM。
有没有办法检测它是否未运行并手动“启动”BroadcaseReceiver?
没有,主要是因为即使在工作时通常也没有运行。 您的BroadcastReceiver实例是在Intent-匹配点创建的,它会调用onReceive(),并且一旦onReceive()返回,BroadcastReceiver就会被处理。

谢谢,这就是我认为它的工作方式,但由于这些问题,我不确定。 - Mac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接