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

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

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

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

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_post)
          .setContentTitle(imageTitle)
          .setContentText(imageDescription)
          .setStyle(NotificationCompat.BigPictureStyle()
                  .bigPicture(myBitmap))
          .build()

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_post)
          .setContentTitle(imageTitle)
          .setContentText(imageDescription)
          .setLargeIcon(myBitmap)
          .setStyle(NotificationCompat.BigPictureStyle()
                  .bigPicture(myBitmap)
                  .bigLargeIcon(null))
          .build()
Свернутое уведомление и развернутое уведомление, содержащее синее изображение.
Рисунок 1. Уведомление, использующее NotificationCompat.BigPictureStyle .

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

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_mail)
          .setContentTitle(emailObject.getSenderName())
          .setContentText(emailObject.getSubject())
          .setLargeIcon(emailObject.getSenderAvatar())
          .setStyle(NotificationCompat.BigTextStyle()
                  .bigText(emailObject.getSubjectAndSnippet()))
          .build()
Свернутое и развернутое уведомление с использованием BigTextStyle
Рисунок 2. Уведомление, использующее NotificationCompat.BigTextStyle .

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

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

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.baseline_email_24)
          .setContentTitle("5 New mails from Frank")
          .setContentText("Check them out")
          .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
          .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].getText(),
          messages[0].getTime(),
          messages[0].getSender())
  val message2 = NotificationCompat.MessagingStyle.Message(
          messages[1].getText(),
          messages[1].getTime(),
          messages[1].getSender())
  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          .setSmallIcon(R.drawable.new_message)
          .setStyle(
                  NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                  .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() .

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

  val notification = NotificationCompat.Builder(context, CHANNEL_ID)
          // Show controls on lock screen even when user hides sensitive content.
          .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
          .setSmallIcon(R.drawable.ic_stat_player)
          // Add media control buttons that invoke intents in your media service
          .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
          .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
          .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
          // Apply the media style template.
          .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                  .setShowActionsInCompactView(1 /* #1: pause button \*/))
          .setContentTitle("Wonderful music")
          .setContentText("My Awesome Band")
          .setLargeIcon(albumArtBitmap)
          .build()
Уведомление со стилем мультимедиа
Рисунок 5. Уведомление, использующее MediaStyleNotificationHelper.MediaStyle .

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

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