2015-06-11 2 views
1

Я использую GCM. Я хочу остановить GcmListenerService, чтобы я мог остановить приложение от получения нежелательного уведомления.Стоп GcmListenerService progmatically

Я попытался ниже, чтобы закрыть сервис, но это не кажется тренировки

Intent intent = new Intent(this, MyGcmListenerService.class); 
stopService(intent); 

Вот мой класс обслуживания

public class MyGcmListenerService extends GcmListenerService 
{ 

    private static final String TAG = "MyGcmListenerService"; 

    // [START receive_message] 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     String duration = data.getString("duration"); 
     Log.d(TAG, "From: " + from); 
     Log.d(TAG, "Message: " + message); 

     sendNotification(message,duration); 
    } 
    // [END receive_message] 

    private void sendNotification(String message, String duration) { 

     new DisplayNotification(this).makeGCMNotification("Event Name", "Event Start Time", 1); 
    } 
} 

и в очевидном

<service 
      android:name=".Utilities.GCM.MyGcmListenerService" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
      </intent-filter> 
     </service> 
+0

Я просто не хочу получать уведомления в какой-то момент в приложении. Пожалуйста, помогите – Ajeet

ответ

1

Остановка службы не поможет, потому что GCMReceiver всегда будет звонить startWakefulService всякий раз появляется новое сообщение. Поскольку класс GCMReceiver на самом деле не является чем-то, что мы должны изменить, я предлагаю вам сохранить логическое значение или задать предпочтение знать, когда полученные сообщения должны быть действительно прочитаны/обработаны. Исходя из этого, вы можете позволить получать сообщения в фоновом режиме, фактически ничего не делая в приложении/переднем плане.

+0

Спасибо :) И я подумал об этом методе. Но я думаю, что это не будет действительно подходящим методом, чтобы прекратить получение push-уведомления. Можете ли вы сказать, есть ли какой-либо возможный способ, чтобы я мог незарегистрировать устройство с самого сервера GCM. ? – Ajeet

+0

Учитывая, что ваш сервер отправляет сообщения, вы можете сделать HTTP-запрос или отправить восходящее сообщение, сообщающее серверу прекратить отправку на это устройство. Более грубым способом является вызов deleteToken() – morepork

1

Вы можете отказаться от подписки от GCM двумя способами: deleteToken() и deleteInstanceID(). Оба подхода генерируют IOExceptions, поэтому они также должны обрабатываться.

См. the "Unregistration and Unsubscription" section.

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