Android GCM(推送通知):设备在应用程序停止时不会收到通知

我在我的Android项目中使用推送通知(GCM)。

根据GCM教程,我实现了广播接收器并将其注册到AndroidManifest.xml

即使我的应用程序closures,这种广播接收器应该也会收到消息(不仅在我的应用程序在后台,即使强制停止)。

但是它不能像我所期望的那样工作。 如果应用程序closures,则不会调用onReceive()方法。 看来我对广播接收机的理解是正确的,问题在于我对GCM的期望。

其中一个可能的原因是,如果应用程序closures,Google服务器甚至不会向设备发送通知。 那么,我的应用程序是否可以收到一个消息( onReceive()方法将在广播接收器中调用onReceive()是正确的,只要它正在运行或在后台(但不closures)?

提前致谢。

Solutions Collecting From Web of "Android GCM(推送通知):设备在应用程序停止时不会收到通知"

即使我的应用程序closures,这种广播接收器应该也会收到消息(不仅在我的应用程序在后台,即使强制停止)。

如果用户从设置强制停止您的应用程序,那么您的代码将永远不会再运行 ,直到手动运行其中一个组件(通常是用户手动启动一个活动(从Android 3.1开始))。 因此,如果用户从设置强制停止您的应用程序,则不会在较新的设备/仿真器上收到GCM消息。

那么,我的应用程序是否可以收到一个消息(onReceive()方法将在广播接收器中调用)是正确的,只要它正在运行或在后台(但不closures)?

从应用的angular度来看,Android没有“closures”的概念。 如果通过“closures”,你的意思是“没有正在运行的进程,最后进程正常终止”,那么是的,你应该接收GCM消息和其他广播。 但是,强制停止不是“正常终止”。

根据这个android-gcm线程中的 Francesco Nerieri:

因此,如果您强制停止应用程序,则ICS的预期行为是应用程序无法收到消息。 在JB这意味着GCM也将注销应用程序,这是一个不幸的行为,我们正在努力改变(JB中的注销部分)。

在文件中说:

Android设备上的Android应用程序无需运行即可接收消息。 当消息到达时,系统会通过Intent广播唤醒Android应用程序,只要应用程序设置了正确的广播接收器和权限即可。

检查您的广播接收器的实施和权限。