10

如果应用程序未运行,GCMIntentService(扩展 GCMBaseIntentService)不会收到通知。

来自:http: //developer.android.com/about/versions/android-3.1.html

在停止的应用程序上启动控件请注意,系统将 FLAG_EXCLUDE_STOPPED_PACKAGES 添加到所有广播意图。这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。后台服务或应用程序可以通过将 FLAG_INCLUDE_STOPPED_PACKAGES 标志添加到应该允许激活停止的应用程序的广播意图来覆盖此行为。

有没有办法绕过这个设置?谢谢

4

2 回答 2

22

如果应用程序未运行,GCMIntentService(扩展 GCMBaseIntentService)不会收到通知。

是的,它会。但是,您的问题的其余部分与应用程序是否正在运行无关,而是与用户之前是否已运行过有关。您引用的段落中的“停止”一词的含义不是“未运行”,而是表示应用程序所处的状态:

  • 首次安装时,在手动调用组件之前(例如,用户启动活动)

  • 在用户强制停止应用程序之后,直到手动调用某个组件(例如,用户启动一个活动)

(我真的很希望他们能想出一个比“停止”更独特的形容词......)

有没有办法绕过这个设置?

否。如果用户强制停止您的应用程序,他们表示他们不希望您的应用程序再次运行,无论出于何种原因,直到他们再次手动启动它。您的目标是让用户没有理由强制停止您的应用程序。请注意,我的意思是“强制停止”(即,按“设置”中的“强制停止”按钮)——普通的任务管理器,或者从 Android 4.x 中的“最近任务”列表中滑动,没有这种效果。

于 2012-07-23T15:04:09.607 回答
2

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

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

于 2012-08-27T22:27:00.733 回答