Существует ли простой способ остановить службу в ответ на нажатие пользователем уведомления? - PullRequest
11 голосов
/ 11 февраля 2012

Мне бы хотелось следующее поведение: пользователь щелкает уведомление, и Android останавливает мою службу.

Проблема заключается в том, что остановка службы требует вызова stopService, и я не могу легко создать PendingIntent, который делает это.

Таким образом, единственный способ сделать это - это получить от моей Службы специальный дополнительный Intent, который заставляет Службу вызывать stopSelf и останавливаться.

Существует ли более простой способ прямой отменыСервис из уведомления нажмите?

Ответы [ 2 ]

13 голосов
/ 20 октября 2013

Спасибо CommonsWare.

Вот краткая иллюстрация вашего решения для тех, кто заинтересован.

Код в классе обслуживания.

// Create Notification 
private void initNotification() {     
  //Register a receiver to stop Service   
  registerReceiver(stopServiceReceiver, new IntentFilter("myFilter"));
  PendingIntent contentIntent = PendingIntent.getBroadcast(this, 0, new Intent("myFilter"), PendingIntent.FLAG_UPDATE_CURRENT);
  notification.setLatestEventInfo(context, contentTitle, contentText,contentIntent);  
  mNotificationManager.notify(NOTIFICATION_ID,notification);  
...
}



//We need to declare the receiver with onReceive function as below
protected BroadcastReceiver stopServiceReceiver = new BroadcastReceiver() {   
  @Override
  public void onReceive(Context context, Intent intent) {
  stopSelf();
  }
};
6 голосов
/ 11 февраля 2012

Вы можете создать простой BroadcastReceiver, который выполняет вызов stopService(), и использовать getBroadcast() PendingIntent для его запуска. Что BroadcastReceiver может быть зарегистрировано в манифесте или через registerReceiver() самим Service (в последнем случае это будет stopSelf() вместо stopService()).

Это, вероятно, не проще, чем то, что у вас есть, и нет способа напрямую вызвать stopService() вызов с PendingIntent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...