Есть ли простой способ остановить службу в ответ на щелчок пользователем уведомления?
Мне нужно следующее поведение:
Пользователь нажимает уведомление, и Android останавливает мою службу.
Проблема в том, что остановка службы требует вызова stopService, и я не могу легко создать PendingIntent, который делает это.
Таким образом, единственный способ, которым я нашел это, - заставить мою службу получить специальный Intent extra, который заставляет Сервис вызывать stopSelf и останавливаться.
Есть ли более простой способ напрямую отменить услугу из уведомления?
Ответы
Ответ 1
Вы можете создать простой BroadcastReceiver
, который выполняет вызов stopService()
, и использовать getBroadcast()
PendingIntent
для его запуска. То, что BroadcastReceiver
может быть зарегистрировано в манифесте или через registerReceiver()
самой Service
(в последнем случае оно будет stopSelf()
, а не stopService()
).
Это, вероятно, не проще, чем то, что у вас есть, и нет способа напрямую вызвать вызов stopService()
из PendingIntent
.
Ответ 2
Спасибо 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();
}
};