我在Android项目中使用推送通知(GCM)。
根据GCM教程中,我实现广播接收器,并在其注册AndroidManifest.xml
。
这种广播接收机应接收消息,即使我的应用程序被关闭(不只是如果我的应用程序是在幕后,但即使是力停止)。
但是,如我所料不工作。 onReceive()
如果应用程序被关闭时不被调用的方法。 看来,我的广播接收机的理解是正确的,问题是我了解GCM预期。
其中一个可能的原因是,谷歌的服务器甚至不发送通知到设备,如果应用程序被关闭。 那么,是不是正确的,我的应用程序能够接收消息(和onReceive()
方法将在广播接收器调用),只有当它正在运行或在后台(而不是封闭的)?
提前致谢。
这种广播接收机应接收消息,即使我的应用程序被关闭(不只是如果我的应用程序是在幕后,但即使是力停止)。
如果用户从设置强制停止您的应用程序,你的代码将永远不会再次运行 ,直到有手动运行您的组件之一,通常是用户手动启动的活动(如安卓3.1)。 因此,如果用户从设置强制停止您的应用程序,你会不会在较新的设备/仿真器接收GCM消息。
那么,是不是正确的,我的应用程序能够接收消息(和的onReceive()方法将在广播接收器调用),只有当它正在运行或在后台(而不是封闭的)?
有没有从应用的角度来看在Android的“封闭”的概念。 如果由“封闭”,你的意思是“有没有正在运行的进程,其中最后一个进程正常结束”,那么,你应该得到GCM消息和其他节目。 但是,再次发力,停止不“正常结束”。
据弗朗西斯Nerieri在这个Android的GCM螺纹 :
所以,如果你强行停止应用程序,为ICS预期的行为是为应用程序不接收消息。 在JB这意味着GCM也将注销该应用程序,这是一个不幸的行为,我们正在努力(在JB的注销部分),以改变这种状况。
在文件它说:
在Android设备上的Android应用程序并不需要运行接收消息。 当消息到达时,只要该应用程序设置为与适当的广播接收机和权限的系统,将唤醒经由意图广播Android应用。
检查你的广播接收器的实现和权限。
文章来源: Android GCM (push notification): device doesn't receive notification if application is stopped