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

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