Вашему приложению может потребоваться срочно привлечь внимание пользователя в определенных ситуациях, например, при срабатывании будильника или входящем звонке. На устройствах под управлением Android 9 (уровень API 28) или ниже это можно реализовать, запустив активность, пока приложение находится в фоновом режиме. В этом документе показано, как реализовать такое поведение на устройствах под управлением Android 10 (уровень API 29) и выше.
Добавьте разрешение POST_NOTIFICATIONS.
Начиная с Android 13 (уровень API 33), укажите разрешение POST_NOTIFICATIONS в файле AndroidManifest.xml :
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
После подтверждения разрешения создайте канал уведомлений.
Создайте канал уведомлений
Создайте канал уведомлений, чтобы отображать уведомления и позволять пользователям управлять категориями уведомлений в системных настройках. Дополнительную информацию о каналах уведомлений см. в разделе «Создание и управление каналами уведомлений» .
Создайте каналы уведомлений в методе onCreate вашего класса Application :
class MyApplication : Application() { override fun onCreate() { super.onCreate() val channel = NotificationChannel( CHANNEL_ID, "High priority notifications", NotificationManager.IMPORTANCE_HIGH ) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } }
При первом запуске приложения система отображает канал на экране информации о приложении , как показано на рисунке 1:

Управление правами доступа к уведомлениям
Начиная с Android 13, запрашивайте разрешения на отправку уведомлений перед их отображением пользователям.
Следующий пример кода демонстрирует, как запросить разрешение на отправку уведомлений во время выполнения в Jetpack Compose:
val permissionLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), onResult = { hasNotificationPermission = it } ) // ... Button( onClick = { if (!hasNotificationPermission) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } }, ) { Text(text = "Request permission") }
На устройствах под управлением Android 13 и выше при нажатии кнопки «Запросить разрешение» отображается системное диалоговое окно, показанное на рисунке 2:

Когда пользователь предоставляет разрешение, система обновляет экран с информацией о приложении , как показано на рисунке 3:

Создайте уведомление с высоким приоритетом.
При создании уведомления с высоким приоритетом укажите четкий заголовок и текст сообщения. Также назначьте канал высокой важности и уровень приоритета.
В следующем примере кода показана настройка и создание уведомления с высоким приоритетом:
private fun showNotification() { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.baseline_auto_awesome_24) .setContentTitle("HIGH PRIORITY") .setContentText("Check this dog puppy video NOW!") .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION) notificationManager.notify(0, notificationBuilder.build()) }
Показать уведомление пользователю
Вызов функции showNotification запускает уведомление следующим образом:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
На рисунке 4 показано уведомление высокого приоритета, отображаемое системой:

Постоянное уведомление
Когда вы отображаете уведомление пользователю, он может подтвердить или отклонить оповещение или напоминание вашего приложения. Например, пользователь может принять или отклонить входящий телефонный звонок.
Если ваше уведомление представляет собой текущую фоновую задачу, например, активный телефонный звонок, свяжите уведомление с фоновой службой . Следующий фрагмент кода показывает, как отобразить уведомление, связанное с фоновой службой:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
Рекомендуется использовать функцию «Обновления в реальном времени».
Для уведомлений, требующих оперативного реагирования, полезно повысить их наглядность. Рассмотрите возможность преобразования таких уведомлений в « Обновления в реальном времени», чтобы отображать информацию о состоянии на всех элементах пользовательского интерфейса системы.