Android 如何避免在应用程序关闭时处理来自GCM的推送通知

Android 如何避免在应用程序关闭时处理来自GCM的推送通知,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,我正在将推送通知集成到具有以下特殊行为的应用程序中: 应用程序仅在通知处于打开状态(前台或后台)时处理通知 我的问题出现在用户使用最近的应用程序堆栈(或类似的东西)关闭应用程序时,因为onDestroy()方法并不总是被调用,并且应用程序无法从GCM中删除令牌。如果此时发送推送通知,应用程序将处理它 我一直在寻找这个问题,似乎每个人都有相反的问题,当应用程序关闭时,他们不会收到通知 是否有配置广播接收器,使其在关闭时不会唤醒我的应用程序?或者有什么方法可以做到这一点 谢谢您使用广播接收器。在

我正在将推送通知集成到具有以下特殊行为的应用程序中:

  • 应用程序仅在通知处于打开状态(前台或后台)时处理通知
我的问题出现在用户使用最近的应用程序堆栈(或类似的东西)关闭应用程序时,因为onDestroy()方法并不总是被调用,并且应用程序无法从GCM中删除令牌。如果此时发送推送通知,应用程序将处理它

我一直在寻找这个问题,似乎每个人都有相反的问题,当应用程序关闭时,他们不会收到通知

是否有配置广播接收器,使其在关闭时不会唤醒我的应用程序?或者有什么方法可以做到这一点


谢谢您使用广播接收器。在onStart中注册它,并在Activity的onStop中注销它


如果您有多个活动,并且在GCM IntentService中执行了一些您希望在应用程序未运行时阻止的操作,则在共享首选项中保留一个计数,并在启动时增加该计数,在所有活动中减少启动时的计数。当您收到GCM检查计数是否为正时,以确保您的应用程序处于前台。

有两种方法可以实现这一点

第一种方法:从堆栈中清除应用程序时调用此方法,我的意思是在应用程序任务中,即OnDestroy或OnTerminate。这将清除设备令牌,这样您就不会再收到通知

但您必须确保,当您返回应用程序时,您需要再次注册并将设备令牌发送到服务器,以便能够正常接收返回的通知

GCMRegistar.unregister(上下文)

第二种方法: 您可以使用SharedReferences,也可以使用布尔值创建它。启动应用程序时必须将值设置为true,清除时必须将值设置为false

然后在gcminentservice类中,可以在onMessage方法中使用此首选项。您可以在那里设置条件,如果该值为true,则它将触发通知,否则将不显示任何内容

在这种情况下,服务器将触发通知,但您的通知不会显示在通知栏中


希望这些信息能对你有所帮助

这将帮助您:如果用户遵循应用程序的常规流程,他将在beggining注册,并在最后取消注册。问题是onDestroy()方法并不总是被调用(例如,当您按下home按钮,然后从最近的应用程序堆栈中关闭应用程序时),因此在这种情况下,您的任何方法都是有效的。您的意思是,当您从堆栈中清除应用程序时,希望获取事件?要获取该事件,可以创建一个应用程序类(扩展应用程序)然后,您必须在该类中调用onTerminate方法,并在那里调用unregister方法。它将对您起作用。当应用程序处于后台时,应用程序必须处理通知(并且在此状态下始终调用onStop()方法)