Cómo crear una notificación expandible

Una notificación básica generalmente incluye un título, una línea de texto y acciones que usuario puede realizar en respuesta. Para proporcionar más información, puedes crear notificaciones expandibles aplicando una de varias plantillas de notificación, como que se describe en este documento.

Para comenzar, crea una notificación con todo el contenido básico, como se describe en Crea una notificación. Luego, llamar setStyle() con un objeto de estilo y suministrar la información correspondiente a cada plantilla, como se muestran en los siguientes ejemplos.

Cómo agregar una imagen grande

Para agregar una imagen en tu notificación, pasa una instancia de NotificationCompat.BigPictureStyle a setStyle().

Kotlin

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

Java

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

Para que la imagen aparezca como una miniatura solo mientras se realiza la notificación contraída, como se muestra en la siguiente figura, llama setLargeIcon() y pasarle la imagen. Luego, llama BigPictureStyle.bigLargeIcon() y pásale null para que el ícono grande desaparezca cuando se active la notificación. expandido:

Kotlin

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()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(new NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build();
Una imagen que muestra una notificación contraída y una notificación expandida con una imagen azul
Figura 1: Una notificación con NotificationCompat.BigPictureStyle

Cómo agregar un bloque de texto grande

Postularse NotificationCompat.BigTextStyle para mostrar texto en el área de contenido expandido de la notificación:

Kotlin

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()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build();
Una imagen que muestra una notificación contraída y una notificación expandida con BigTextStyle
Figura 2: Una notificación con NotificationCompat.BigTextStyle

Cómo crear una notificación con estilo de bandeja de entrada

Postularse NotificationCompat.InboxStyle a una notificación si deseas agregar varias líneas de resumen breve, como fragmentos de correos electrónicos entrantes. Esto te permite agregar varios fragmentos de texto de contenido que se truncan a una línea en lugar de una línea de texto continua proporcionado por 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 solo las seis primeras son visibles.

Kotlin

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()

Java

Notification 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();

El resultado se ve como la siguiente figura:

Una imagen que muestra una notificación expandida al estilo de la bandeja de entrada
Figura 3: Un estilo de bandeja de entrada expandido notificación.

Cómo mostrar una conversación en una notificación

Postularse NotificationCompat.MessagingStyle para mostrar mensajes secuenciales entre cualquier cantidad de personas. Esto es ideal para de mensajería, ya que proporciona un diseño coherente para cada mensaje manejar el nombre del remitente y el texto del mensaje por separado, y cada mensaje se puede varias líneas de largo.

Para agregar un mensaje nuevo, llama addMessage(): pasando el texto del mensaje, la hora de recepción y el nombre del remitente. También puedes pasa esta información como un NotificationCompat.MessagingStyle.Message como se muestra en el siguiente ejemplo:

Kotlin

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()

Java

NotificationCompat.MessagingStyle.Message message1 =
        new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                      messages[0].getTime(),
                                                      messages[0].getSender());
NotificationCompat.MessagingStyle.Message message2 =
        new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                      messages[1].getTime(),
                                                      messages[1].getSender());

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build();
Una imagen que muestra una notificación en estilo de mensajería
Figura 4: Una notificación con NotificationCompat.MessagingStyle

Cuando se usa NotificationCompat.MessagingStyle, cualquier valor dado a setContentTitle() y setContentText() se ignoran.

Puedes llamar setConversationTitle() para agregar un título que aparezca arriba de la conversación. Esta podría ser la 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 establecer el título de una conversación para chats individuales, ya que el sistema usa la existencia de este campo como pista que la conversación es un grupo.

Este estilo se aplica solo en dispositivos con Android 7.0 (nivel de API 24) y versiones posteriores. Cuando usas la biblioteca de compatibilidad (NotificationCompat), como se demostró anteriormente, las notificaciones con MessagingStyle revierten automáticamente a un estilo de notificación expandida compatible.

Cuando crees una notificación como esta para una conversación de chat, agrega un mensaje directo acción de respuesta.

Cómo crear una notificación con controles de contenido multimedia

Postularse MediaStyleNotificationHelper.MediaStyle para mostrar los controles de reproducción de contenido multimedia y la información de la pista.

Especifica tus MediaSession en . Esto permite que Android muestre la información correcta sobre tu medios de comunicación.

Llamada addAction() hasta cinco veces para mostrar hasta cinco botones de íconos. Llamar a setLargeIcon() a establece la portada del álbum.

A diferencia de otros estilos de notificación, MediaStyle también te permite modificar el vista de contenido en tamaño contraído especificando tres botones de acción que también aparecen en la vista contraída. Para ello, proporciona los índices de botones de acción a setShowActionsInCompactView()

En el siguiente ejemplo, se muestra cómo crear una notificación con controles multimedia:

Kotlin

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()

Java

Notification notification = new 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(new MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
Una imagen que muestra una notificación con estilo multimedia
Figura 5: Una notificación con MediaStyleNotificationHelper.MediaStyle

Recursos adicionales

Consulta las siguientes referencias para obtener más información sobre MediaStyle y notificaciones expandibles.