【问题标题】:Android BroadcastReceiver not working after installAndroid BroadcastReceiver 安装后不工作
【发布时间】:2011-04-25 04:16:09
【问题描述】:

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

是否有理由需要重启这些手机才能让 BroadcaseReceiver 接收任何内容?有没有办法可以检测它是否没有运行并手动“启动”BroadcaseReceiver?我很难过,所以如果你能提供任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    扩展问题:从 Android 3.1 开始,已安装的应用程序处于“STOPPED”状态。要从停止的应用程序调用 BroadcastReceiver(s),需要额外的 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);

    【讨论】:

    • 这是大家都在寻找的答案。如果有些人不明白如何使用它:在您的 GCM 广播接收器中添加意图 FLAG_INCLUDE_STOPPED_PACKAGES,即使您的应用程序“停止”,您也应该能够接收通知。
    【解决方案2】:

    这些手机是否需要重启才能让 BroadcaseReceiver 接收任何内容?

    假设您的应用程序的 BroadcastReceiver 已在 PHONE_STATE 广播的清单中注册,它应该在安装后立即运行。如果没有,我觉得它就像一个有问题的 ROM。

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

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

    【讨论】:

    • 谢谢,我认为它是这样工作的,但对于这些问题我不确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2016-01-06
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多