2013-03-01 82 views
2

我正在使用GCMIntentService接收GCM消息。這一切都按預期工作,但我允許用戶「退出」或停止應用程序,之後不應將新消息傳遞到設備。如何停止或取消註冊GCMIntentService服務?

問題是,我該如何停止運行GCMIntentService?在我關閉所有內容並在我的Activity上調用「finish」後,原因是GCMIntentService仍然會收到導致NullRef導致的消息。

當然,我可以做一個if語句來避免nullRef,但我想完全停止GCMIntentService,因此它不再運行。

我該怎麼做?

+0

哦,請注意,我不想用GCM取消註冊設備。用戶可以再次啓動應用程序,並且GCM註冊表保持不變。 – Ted 2013-03-01 13:35:21

+0

另請注意,我試圖停止使用此代碼服務: * stopService(新的意圖(myOtherService.this,GCMIntentService.class)); *但沒有奏效。 – Ted 2013-03-01 13:36:32

+0

您是否找到了解決方案?我有完全相同的問題。 – 2014-02-19 17:59:35

回答

0

如果忽略從GCM獲得的消息, 可以說你有一個布爾值決定了GCM的狀態,關閉時你只是忽略了傳入的消息。

// 在GCMRegistrar

+0

是的,正如我在我的問題中指出的那樣,「我可以做一個if語句來避免nullRef,但我想完全停止GCMIntentService,以便它不再運行」=) – Ted 2013-03-01 14:28:46

+0

「與您取消註冊」工作? – 2013-03-01 15:55:29

+0

取消註冊什麼?服務?我真的不能註銷一項服務,我只能取消註冊收件人等等......對吧? – Ted 2013-03-03 19:33:51

0

看到http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html#unregister(android.content.Context) public static void unregister (Context context)如果有人正在尋找的答案,我的解決辦法是:
在禁用的onDestroy我GCMListener類意向篩選:

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); 

P.S. 所有GCM消息都將被忽略,因此您稍後不會收到它們。