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

时间:2012-08-22 12:44:18

标签: android broadcastreceiver push-notification google-cloud-messaging

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

根据GCM教程,我实现了广播接收器并在AndroidManifest.xml中注册了它。

即使我的应用程序已关闭,这种广播接收器也应该接收消息(不仅是我的应用程序处于后台,但即使它被强制停止)。

但它没有像我期望的那样起作用。如果应用关闭,则不会调用onReceive()方法。我对广播接收机的理解似乎是正确的,问题在于我对GCM的期望。

可能的原因之一是,如果应用关闭,Google服务器甚至不会向设备发送通知。那么,我的应用程序是否可以接收消息(并且onReceive()方法将在广播接收器中调用),只有当它正在运行或在后台(但未关闭)时才是正确的吗?

提前致谢。

3 个答案:

答案 0 :(得分:16)

  

即使我的应用程序已关闭,这种广播接收器也应该接收消息(不仅是我的应用程序处于后台,但即使它被强制停止)。

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

  

那么,只有当我的应用程序正在运行或在后台运行(但未关闭)时,我的应用程序才能接收到一条消息(并且广播接收器中将调用onReceive()方法)是否正确?

从应用程序的角度来看,Android中没有“封闭”的概念。如果,通过“关闭”,你的意思是“没有正在运行的进程,最后一个进程正常终止”,那么是的,你应该收到GCM消息和其他广播。但是,再次强制停止并非“正常终止”。

答案 1 :(得分:3)

Francesco Nerieri在this android-gcm thread中说:

  

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

答案 2 :(得分:2)

documentation中它说:

  

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

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