Отображение чувствительных ко времени уведомлений

Вашему приложению может потребоваться срочно привлечь внимание пользователя в определённых ситуациях, например, при срабатывании будильника или входящем звонке. В приложениях, предназначенных для устройств под управлением 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:

Изображение экрана «Информация о приложении» и «Уведомления» вашего приложения.
Рисунок 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:

Изображение, показывающее диалоговое окно запроса разрешения
Рисунок 2. Системный диалог для запроса разрешения на уведомление.

Если пользователь принимает запрос на разрешение, раздел «Информация о приложении» приложения выглядит так, как показано на рисунке 3:

Изображение экрана «Информация о приложении» после предоставления запроса на разрешение уведомления
Рисунок 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:

Изображение, показывающее уведомление с высоким приоритетом
Рисунок 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);