Обычно оно содержит заголовок, строку текста и действия, которые пользователь может выполнить в ответ. Чтобы предоставить больше информации, вы можете создать большие, разворачиваемые уведомления, применив один из нескольких шаблонов уведомлений, как описано в этом документе.
Для начала создайте уведомление с базовым контентом, как описано в разделе Как создать уведомление. Затем вызовите 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()
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()
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()
Результат выглядит так:
Как показывать чат в уведомлении
Примените 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()
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()
MediaStyleNotificationHelper.MediaStyle.
Дополнительные ресурсы
Дополнительную информацию о MediaStyle и разворачиваемых уведомлениях можно найти в следующих источниках: