2013-03-01 2 views
2

Я использую GCMIntentService для получения сообщений GCM. Все работает так, как ожидалось, но я разрешаю пользователю «выйти» или остановить приложение, после чего новые сообщения не должны доставляться на устройство.Как остановить или отменить регистрацию службы GCMIntentService?

Вопрос в том, как я могу остановить запуск GCMIntentService? Причина, когда я закрываю все и нажимаю «закончить» на моей Activity, GCMIntentService все еще получает сообщения, которые вызывали NullRef.

И конечно, я могу сделать if-statement, чтобы избежать nullRef, но я хочу полностью остановить GCMIntentService, чтобы он больше не работал.

Как я могу это сделать?

+0

О, пожалуйста, обратите внимание, что я не хочу отменять регистрацию устройства с помощью GCM. Пользователь может снова запустить приложение, и GCM regId останется прежним. – Ted

+0

Также обратите внимание, что я пытался остановить службу, используя этот код: * stopService (новый Intent (myOtherService.this, GCMIntentService.class)); * но это не сработало. – Ted

+0

Вы нашли решение для этого? У меня точно такая же проблема. –

ответ

0

Как просто игнорировать сообщение, которое вы получили от GCM? позволяет сказать, что у вас есть логическое значение, определяющее статус GCM, когда вы просто игнорируете входящие сообщения.

// см http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html#unregister(android.content.Context) public static void unregister (Context context) в GCMRegistrar

+0

Да, как я уже отмечал в своем вопросе: «Я могу сделать if-statement, чтобы избежать nullRef, но я хочу полностью остановить GCMIntentService, так что он больше не работает» =) – Ted

+0

«отменил регистрацию» с вами? –

+0

Отменить регистрацию? Обслуживание? Я не могу действительно отменить регистрацию службы, я могу только отменить регистрацию приемников и т. Д. ... верно? – Ted

0

Если кто-то ищет ответ, мое решение:
В OnDestroy отключить мой класс GCMListener Intent-фильтр:

getPackageManager().setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyGCMListenerClass.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

И в OnResume Re-enable:

getPackageManager().setComponentEnabledSetting(new ComponentName(getApplicationContext(), GCMListener.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

P.S. Все сообщения GCM будут игнорироваться, поэтому вы их не получите позднее.

Смежные вопросы