应用程序在接收gcm消息广播时未被唤醒

jph*_*jph 3 android android-c2dm google-cloud-messaging

我最近使用谷歌的帮助程序类(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>
Run Code Online (Sandbox Code Playgroud)

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

jph*_*jph 6

的Bleh.弄清楚了.David Wasser的回答如下:

BroadcastReceiver无法正常工作

解释了为什么我的应用程序没有运行时我没有看到广播.我强行从管理应用程序退出它,使其进入"已停止"状态(从而导致系统默认将其从广播中排除).

当我安装应用程序时,启动它,关闭设备,然后再打开电源,我正在接收广播.