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

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

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