我最近使用谷歌的帮助类(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>
请记住:这在应用程序在后台运行时有效。