Вашему приложению может потребоваться срочно привлечь внимание пользователя в определенных ситуациях, например, при срабатывании будильника или входящем звонке. В приложениях, предназначенных для устройств под управлением Android 9 (уровень API 28) или более ранних версий, это можно реализовать путем запуска активности, пока приложение находится в фоновом режиме. В этом документе показано, как реализовать такое поведение на устройствах под управлением Android 10 (уровень API 29) до Android 13 (уровень API 33).
Добавьте разрешение POST_NOTIFICATIONS.
Начиная с Android 13, добавьте следующую строку в файл AndroidManifest.xml :
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Получив это, вы можете создать канал уведомлений.
Создайте канал уведомлений
Создайте канал уведомлений, чтобы корректно отображать уведомления и позволить пользователю управлять ими в настройках приложения. Дополнительную информацию о каналах уведомлений см. в разделе «Создание и управление каналами уведомлений» .
Создайте каналы уведомлений в методе onCreate вашего класса Application :
Котлин
class DACapp : 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, запрашивайте разрешения на отправку уведомлений перед их отображением пользователям.
Минимальная реализация выглядит следующим образом:
Котлин
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, нажатие кнопки Request permission вызовет диалоговое окно, показанное на рисунке 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(666, notificationBuilder.build()) }
Показать уведомление пользователю
Вызов функции showNotification() запускает уведомление следующим образом:
Котлин
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
В этом примере уведомление выглядит так, как показано на рисунке 4:

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