3

我最近使用谷歌的帮助类(GCMBroadcastReceiver、GCMBaseIntentService)将 GCM 消息添加到我的应用程序中。它在应用程序运行时运行良好,无论是在前台还是不在前台。但是,当它不运行时,没有任何效果。

作为测试,我扩展了 GCMBroadcastReceiver 并将日志语句添加到 getGCMIntentServiceClassName() 和 peekService()。当应用程序正在运行并且消息到达时,我看到前者被调用。然后操作系统实例化我的服务类,最终导致 onMessage() 被调用。

当应用程序未运行时,永远不会调用 getGCMIntentServiceClassName()。

我的清单几乎是来自 Google 的 GCM 示例的样板代码。

是否需要设置额外的权限或标志才能让操作系统在我的应用程序未运行并且消息到达时唤醒我的应用程序并带有正确的意图类别?我的接收器定义为:

<receiver
    android:name=".GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

        <category android:name="PACKAGENAME" />
    </intent-filter>
</receiver>

请记住:这在应用程序在后台运行时有效。

4

2 回答 2

6

呜呜。弄清楚了。大卫瓦瑟在这里的回答:

广播接收器不工作

解释了为什么我的应用未运行时看不到广播。我被迫从管理应用程序中退出它,这使它进入“停止”状态(从而导致系统默认将其从广播中排除)。

当我安装应用程序,启动它,关闭设备,然后再次打开它,我可以正确接收广播。

于 2012-07-10T05:46:33.077 回答
0

我有同样的问题,只需从 Android Studio 运行通过 RUN 按钮即可解决。

我认为在调试模式下它不起作用

于 2016-09-27T15:04:07.903 回答