Создайте расширяемое уведомление

Обычно базовое уведомление включает заголовок, строку текста и действия, которые пользователь может выполнить в ответ. Для предоставления более подробной информации можно создавать большие, расширяемые уведомления, используя один из нескольких шаблонов уведомлений, описанных в этом документе.

Для начала создайте уведомление со всем основным содержимым, как описано в разделе «Создание уведомления» . Затем вызовите setStyle() с объектом стиля и укажите информацию, соответствующую каждому шаблону, как показано в следующих примерах.

Добавить большое изображение

Чтобы добавить изображение в уведомление, передайте экземпляр NotificationCompat.BigPictureStyle в setStyle() .

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

Чтобы изображение отображалось в виде миниатюры только в свернутом состоянии уведомления, как показано на следующем рисунке, вызовите setLargeIcon() и передайте ему изображение. Затем вызовите BigPictureStyle.bigLargeIcon() и передайте ему null , чтобы большая иконка исчезла при разворачивании уведомления:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

Свернутое уведомление и развернутое уведомление, содержащее синее изображение.
Рисунок 1. Уведомление, использующее NotificationCompat.BigPictureStyle .

Добавьте большой блок текста

Примените NotificationCompat.BigTextStyle для отображения текста в развернутой области содержимого уведомления:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

Свернутое и развернутое уведомление с использованием BigTextStyle
Рисунок 2. Уведомление, использующее NotificationCompat.BigTextStyle .

Создайте уведомление в стиле "Входящие".

Примените NotificationCompat.InboxStyle к уведомлению, если хотите добавить несколько коротких строк с кратким содержанием, например, фрагменты входящих писем. Это позволит добавить несколько фрагментов текста, каждый из которых будет обрезан до одной строки, вместо одной сплошной строки текста, предоставляемой NotificationCompat.BigTextStyle .

Чтобы добавить новую строку, вызовите функцию addLine() до шести раз, как показано в следующем примере. Если вы добавите более шести строк, будут видны только первые шесть.

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.mail)
    .setContentTitle("5 New mails from Frank")
    .setContentText("Check them out")
    .setLargeIcon(bitmapImage)
    .setStyle(
        NotificationCompat.InboxStyle()
            .addLine("Re: Planning")
            .addLine("Delivery on its way")
            .addLine("Follow-up")
    )
    .build()

В результате получается следующее изображение:

Расширенное уведомление в стиле "Входящие"
Рисунок 3. Расширенное уведомление в стиле «входящие».

Отобразить диалог в уведомлении

Примените NotificationCompat.MessagingStyle для отображения последовательных сообщений от любого количества отправителей. Это идеально подходит для мессенджеров, поскольку обеспечивает единообразный макет для каждого сообщения, обрабатывая имя отправителя и текст сообщения отдельно, и каждое сообщение может состоять из нескольких строк.

Чтобы добавить новое сообщение, вызовите addMessage() , передав текст сообщения, время получения и имя отправителя. Вы также можете передать эту информацию в виде объекта NotificationCompat.MessagingStyle.Message , как показано в следующем примере:

val message1 = NotificationCompat.MessagingStyle.Message(
    messages[0].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .addMessage(message1)
            .addMessage(message2)
    )
    .build()

Уведомление в стиле сообщения
Рисунок 4. Уведомление, использующее NotificationCompat.MessagingStyle .

При использовании NotificationCompat.MessagingStyle любые значения, переданные в методы setContentTitle() и setContentText() игнорируются.

Вы можете вызвать setConversationTitle() , чтобы добавить заголовок, который будет отображаться над беседой. Это может быть созданное пользователем название группы или, если у группы нет конкретного названия, список участников беседы. Не следует устанавливать заголовок для чатов один на один, поскольку система использует наличие этого поля как подсказку о том, что беседа является групповой.

Этот стиль применяется только на устройствах под управлением Android 7.0 (уровень API 24) и более поздних версий. При использовании библиотеки совместимости ( NotificationCompat ), как было показано ранее, уведомления с MessagingStyle автоматически переключаются на поддерживаемый расширенный стиль уведомлений.

При создании подобного уведомления для чата добавьте действие прямого ответа .

Создайте уведомление с элементами управления воспроизведением мультимедиа.

Примените MediaStyleNotificationHelper.MediaStyle для отображения элементов управления воспроизведением мультимедиа и информации о треке.

Укажите связанный с вами MediaSession в конструкторе. Это позволит Android отображать правильную информацию о ваших медиафайлах.

Вызовите addAction() до пяти раз, чтобы отобразить до пяти кнопок с иконками. Вызовите setLargeIcon() , чтобы установить обложку альбома.

В отличие от других стилей уведомлений, MediaStyle также позволяет изменять размер содержимого в свернутом виде, указывая три кнопки действий, которые также отображаются в свернутом виде. Для этого укажите индексы кнопок действий в setShowActionsInCompactView() .

В следующем примере показано, как создать уведомление с элементами управления мультимедиа:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

Уведомление со стилем мультимедиа
Рисунок 5. Уведомление, использующее MediaStyleNotificationHelper.MediaStyle .

Дополнительные ресурсы

Для получения дополнительной информации о MediaStyle и расширяемых уведомлениях см. следующие ссылки.