Как взаимодействовать с Service через уведомления

«Как взаимодействовать с Service через уведомления» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для взаимодействия с Service через уведомления можно использовать PendingIntent, который запускает Service или передает данные через Intent.

  1. Создание уведомления с действиями:
val intent = Intent(context, MyService::class.java).apply {
    action = "ACTION_STOP"
}
val pendingIntent = PendingIntent.getService(
    context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentTitle("Service Running")
    .addAction(R.drawable.ic_stop, "Stop", pendingIntent)
    .build()
  1. Обработка в Service:
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    when (intent?.action) {
        "ACTION_STOP" -> stopSelf()
    }
    return START_STICKY
}

Важно:

  • Используйте PendingIntent.FLAG_IMMUTABLE для Android 12+.
  • Для двустороннего взаимодействия можно использовать BroadcastReceiver или BoundService.