Есть простой способ остановить службу в ответ на нажатие пользователем уведомления?
Я хотел бы следующее поведение: Пользователь щелкает уведомление, и 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(); } };