Por lo general, una notificación básica incluye un título, una línea de texto y acciones que el usuario puede realizar en respuesta. Para proporcionar más información, puedes crear notificaciones grandes y expandibles mediante una de las tantas plantillas de notificaciones, como se describe en este documento.
Para comenzar, crea una notificación con todo el contenido básico, según se describe en
Cómo crear una notificación. Luego, llama a setStyle() con un objeto de estilo y
proporciona la información correspondiente a cada plantilla, como se muestra en los siguientes
ejemplos.
Cómo agregar una imagen grande
Para agregar una imagen en la notificación, pasa una instancia de
NotificationCompat.BigPictureStyle a 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()
Si quieres que la imagen aparezca como una miniatura solo cuando se
contrae la notificación, como se muestra en la siguiente figura, llama a
setLargeIcon()
y pásale la imagen. Además, deberás llamar a
BigPictureStyle.bigLargeIcon()
y pasarle el valor null a fin de que el ícono grande desaparezca cuando se expanda la notificación:
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.
Cómo agregar un bloque de texto grande
Aplica NotificationCompat.BigTextStyle para mostrar texto en el área de contenido expandido
de la notificación:
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.
Cómo crear una notificación con estilo de bandeja de entrada
Aplica NotificationCompat.InboxStyle a una notificación si quieres agregar
varias líneas de resumen breve, como fragmentos de correos electrónicos entrantes. De esta manera, puedes agregar varias porciones del texto de contenido. Cada una se truncará en una línea, en lugar de mostrarse en una línea continua de texto que proporciona NotificationCompat.BigTextStyle.
Para agregar una línea nueva, llama a addLine() hasta seis veces, como se muestra en el
siguiente ejemplo. Si agregas más de seis líneas, solo se verán las primeras seis.
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()
El resultado se ve como en la siguiente figura:
Cómo mostrar una conversación en una notificación
Aplica NotificationCompat.MessagingStyle a fin de mostrar mensajes secuenciales
entre cualquier cantidad de personas. Esta opción es ideal para las apps de mensajes, ya que proporciona un diseño coherente a cada mensaje mediante la administración del nombre del remitente y el texto del mensaje por separado, y cada mensaje puede tener varias líneas.
Para agregar un mensaje nuevo, llama a addMessage() y pasa el texto del mensaje, la
hora de recepción y el nombre del remitente. También puedes pasar esta información como un
NotificationCompat.MessagingStyle.Message objeto, como se muestra en el
siguiente ejemplo:
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.
Cuando se usa NotificationCompat.MessagingStyle, se ignoran todos los valores que se le dan a
setContentTitle() y setContentText().
Puedes llamar a setConversationTitle() para agregar un título que aparezca sobre
la conversación. Este puede ser el nombre del grupo creado por el usuario o, si no tiene un nombre específico, una lista de los participantes de la conversación.
No establezcas un título de conversación para chats entre dos personas, porque el sistema usa los datos de este campo para indicar que la conversación es un grupo.
Este estilo solo se aplica en dispositivos que ejecutan Android 7.0 (nivel de API 24) y versiones posteriores.
Cuando se usa la biblioteca de compatibilidad (NotificationCompat), como
se mostró anteriormente, las notificaciones con MessagingStyle adoptan
automáticamente un estilo de notificación expandida compatible.
Cuando se crea una notificación como esta para una conversación de chat, agrega una respuesta directa.
Cómo crear una notificación con controles de contenido multimedia
Aplica MediaStyleNotificationHelper.MediaStyle para mostrar los controles de reproducción de contenido multimedia
y la información de la pista.
Especifica tu MediaSession asociada en el constructor. Esto permite que Android muestre la información correcta sobre tu contenido multimedia.
Puedes llamar a addAction() hasta cinco veces para mostrar cinco botones de íconos.
Llama a setLargeIcon() para configurar el material gráfico del álbum.
A diferencia de los otros estilos de notificaciones, MediaStyle también te permite modificar la vista de contenido de tamaño contraído mediante la especificación de tres botones de acción que también deberían aparecer en la vista contraída. Para hacerlo, proporciona los índices de botones de acciones a
setShowActionsInCompactView().
En el siguiente ejemplo, se muestra cómo crear una notificación con controles de contenido multimedia:
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.
Recursos adicionales
Consulta las siguientes referencias para obtener más información sobre MediaStyle y las notificaciones expandibles.