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

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

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

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

есть ли более простой способ напрямую отменить услугу из уведомления нажмите кнопку?

2 ответов


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

это, вероятно, не проще, чем то, что у вас есть, хотя, и нет никакого способа непосредственно вызвать stopService() звонок от PendingIntent.


Спасибо 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();
  }
};