我正在使用 GCMIntentService 接收 GCM 消息。这一切都按预期工作,但我允许用户“退出”或停止应用程序,之后不应将新消息传递到设备。
问题是,如何阻止 GCMIntentService 运行?因为在我关闭所有内容并在我的 Activity 上调用“完成”之后,GCMIntentService 仍然收到导致 NullRef 的消息。
当然,我可以做一个 if 语句来避免 nullRef,但我想完全停止 GCMIntentService,使其不再运行。
我怎样才能做到这一点?
我正在使用 GCMIntentService 接收 GCM 消息。这一切都按预期工作,但我允许用户“退出”或停止应用程序,之后不应将新消息传递到设备。
问题是,如何阻止 GCMIntentService 运行?因为在我关闭所有内容并在我的 Activity 上调用“完成”之后,GCMIntentService 仍然收到导致 NullRef 的消息。
当然,我可以做一个 if 语句来避免 nullRef,但我想完全停止 GCMIntentService,使其不再运行。
我怎样才能做到这一点?
忽略您从 GCM 收到的消息怎么样?假设您有一个布尔值确定 GCM 状态,当您关闭时,您只需忽略传入的消息。
// 参见http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html#unregister(android.content.Context
public static void unregister (Context context) )GCMRegistrar
如果有人正在寻找答案,我的解决方案是:
在 onDestroy 中禁用我的 GCMListener 类 Intent-Filter:
getPackageManager().setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyGCMListenerClass.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
并在 OnResume 重新启用:
getPackageManager().setComponentEnabledSetting(new ComponentName(getApplicationContext(), GCMListener.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
PS 所有 GCM 消息都将被忽略,因此您以后不会收到它们。