我最近使用谷歌的帮助程序类(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>
请记住:当应用程序在后台运行时,此功能正常。
答案 0 :(得分:6)
的Bleh。弄清楚了。 David Wasser在这里回答:
BroadcastReceiver isn't working
解释了为什么我的应用运行时没有看到广播。我是强制从管理应用程序退出它,它将它放入&#34;停止&#34; state(从而导致系统默认将其从广播中排除)。
当我安装应用程序时,启动它,关闭设备电源,然后重新打开电源,我正确接收广播。
答案 1 :(得分:0)
我遇到了同样的问题,只需从Android Studio运行直通RUN按钮即可修复。
我认为在调试模式下它不起作用