Android Studio: уроки на Kotlin. Notification Manager

В этом практическом руководстве мы воспользуемся языком Kotlin, чтобы добавить в приложение локальные уведомления. Вы научитесь формировать сообщения, настраивать каналы и обрабатывать нажатия прямо в среде Android Studio. Пошаговый урок раскроет все детали: от создания простого текстового оповещения до добавления кнопок действий, которые перенесут пользователя в нужный раздел программы.


Зачем нужны уведомления и как они работают

Уведомления позволяют приложению сообщать пользователю о важных событиях, даже когда оно не запущено. Это может быть новое сообщение, напоминание о задаче или завершение загрузки. В Android они отображаются в панели уведомлений и на заблокированном экране. Чтобы система приняла ваше оповещение, необходимо правильно настроить канал уведомлений и само сообщение.


Создание канала уведомлений

Начиная с Android 8.0 (API 26), все уведомления группируются по каналам. Пользователь может отключить конкретный канал в настройках, поэтому важно дать каналу понятное название. Создадим канал в Application или в Activity до отправки первого уведомления.

val channelId = "my_channel_id"
val channelName = "Основные уведомления"
val importance = NotificationManager.IMPORTANCE_DEFAULT

val channel = NotificationChannel(channelId, channelName, importance).apply {
    description = "Канал для важных оповещений"
}

val notificationManager = getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(channel)

Код достаточно выполнить один раз — повторное создание канала с тем же ID не вызывает ошибок. Если ваше приложение поддерживает Android 8 и выше, без канала уведомление не появится.


Отправка простого уведомления

Для построения уведомления используется NotificationCompat.Builder. Он позволяет задать заголовок, текст, маленькую иконку, а также действие по нажатию. После настройки вызовите notify() с уникальным ID.

val builder = NotificationCompat.Builder(this, channelId)
    .setSmallIcon(android.R.drawable.ic_dialog_info)
    .setContentTitle("Привет!")
    .setContentText("Это ваше первое уведомление на Kotlin")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    .setAutoCancel(true) // скрыть после нажатия

notificationManager.notify(1, builder.build())

Метод setAutoCancel(true) убирает уведомление, когда пользователь на него нажмёт. Иконку setSmallIcon можно заменить на свой ресурс из папки drawable.


Добавление действия при нажатии

Обычно по клику на уведомление открывается определённый экран приложения. Для этого создают PendingIntent, который ссылается на нужную Activity. Флаг FLAG_IMMUTABLE обязателен для Android 12+.

val intent = Intent(this, MainActivity::class.java).apply {
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent = PendingIntent.getActivity(
    this, 0, intent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val builder = NotificationCompat.Builder(this, channelId)
    // ... предыдущие настройки
    .setContentIntent(pendingIntent)

Теперь при нажатии на уведомление откроется MainActivity. Если нужно передать данные, добавьте их в Intent через putExtra — они попадут в запущенную Activity.


Уведомления с кнопками действий

В компактном виде можно добавить до трёх кнопок, которые выполняют разные задачи: «Ответить», «Отложить», «Удалить». Для каждой кнопки нужен свой PendingIntent и вызов addAction.

val snoozeIntent = Intent(this, SnoozeReceiver::class.java).apply {
    putExtra("notification_id", 1)
}
val snoozePendingIntent = PendingIntent.getBroadcast(
    this, 0, snoozeIntent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

builder.addAction(android.R.drawable.ic_menu_close_clear_cancel,
    "Отложить", snoozePendingIntent)

В примере используется BroadcastReceiver, который сработает при нажатии кнопки. Вы можете аналогично запустить Service или другую Activity. Не забудьте зарегистрировать Receiver в манифесте или динамически.


Обновление и отмена уведомлений

Чтобы обновить содержимое уже существующего уведомления, отправьте новое с тем же ID. Старое заменится. Чтобы отменить уведомление программно, вызовите cancel(id) или cancelAll() для удаления всех уведомлений приложения.

notificationManager.cancel(1)   // удалить конкретное
notificationManager.cancelAll() // удалить все

Советы начинающим

  • Проверяйте версию Android. На устройствах с API ниже 26 каналы не используются, но NotificationCompat.Builder автоматически адаптирует поведение.
  • Не злоупотребляйте уведомлениями. Частые оповещения раздражают пользователя и могут привести к отключению канала. Показывайте только действительно важную информацию.
  • Используйте группы. Если уведомлений много, объединяйте их в группы через setGroup(), чтобы панель не была захламлена.

Итог

Мы только что разобрали, как добавить оповещения в своё приложение, пользуясь средствами языка Kotlin. Вы настроили канал, отправили первое сообщение, прикрепили действие при клике и даже встроили кнопки для дополнительных операций. Эти навыки пригодятся в любом проекте, где требуется информировать пользователя о событиях — от мессенджеров до трекеров привычек. Теперь попробуйте самостоятельно добавить вибрацию, установить собственный звук или создать развёрнутое уведомление с большим текстом.