Вашему приложению может потребоваться срочно привлечь внимание пользователя в определенных ситуациях, например, при звонке будильника или входящем звонке. В приложениях, предназначенных для устройств под управлением 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)
Ява
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification);