Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Estilos de notificaciones en Wear

Wear OS by Google admite estilos de notificación para mejorar la experiencia del usuario en un reloj.

Los estilos de notificación más comunes son los siguientes:

  • BIG_TEXT_STYLE
  • BIG_PICTURE_STYLE
  • INBOX_STYLE
  • MESSAGING_STYLE

En las siguientes secciones, se analiza cómo agregar MESSAGING_STYLE y BIG_TEXT_STYLE a tus notificaciones. Para incorporar otros estilos de notificación, consulta el ejemplo de notificaciones de Wear.

Consulta los siguientes recursos relacionados:

Cómo construir una notificación de MessagingStyle

Si tienes una app de chat, tus notificaciones deben usar NotificationCompat.MessagingStyle, que se agregó en Android 7.0. Wear usa los mensajes de chat incluidos en una notificación MessagingStyle (consulta addMessage()) para brindar una experiencia similar a la de un chat enriquecido en la notificación expandida.

Nota: Las notificaciones expandidas de MessagingStyle requieren al menos la versión 1.5.0.2861804 de la aplicación complementaria de Wear en tu teléfono Android vinculado.

Respuesta inteligente

Wear presenta Respuesta inteligente para las notificaciones de MessagingStyle. Respuesta inteligente proporciona al usuario opciones tangibles contextualmente relevantes en la notificación expandida y en RemoteInput. Esto aumenta la lista fija de opciones que el desarrollador proporciona en RemoteInput con el método setChoices().

Respuesta inteligente les proporciona a los usuarios una forma rápida (presionar una vez), discreta (sin hablar en voz alta), privada (los mensajes que recibe el usuario nunca salen del reloj) y confiable (no se requiere conexión a Internet) de responder a los mensajes de chat.

Los mensajes que sugiere Respuesta inteligente son generados por un modelo de aprendizaje automático totalmente incorporado en el reloj a partir del contexto que brinda la notificación de MessagingStyle. No se envían datos de notificación del usuario a los servidores de Google para generar mensajes de Respuesta inteligente.

Sigue estos pasos a fin de habilitar Respuesta inteligente para tu acción de notificación:

  1. Usa NotificationCompat.MessagingStyle.
  2. Llama al método setAllowGeneratedReplies(true) para la acción de notificación.
  3. Asegúrate de que la acción de notificación tenga definida una RemoteInput (allí se almacenarán las respuestas).

En el ejemplo siguiente se muestra cómo crear una notificación de MessagingStyle con mensajes de Respuesta inteligente.

Kotlin

    // Create an intent for the reply action
    val replyPendingIntent = Intent(this, ReplyActivity::class.java).let { replyIntent ->
        PendingIntent.getActivity(this, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT)
    }

    // Create the reply action and add the remote input
    val action = NotificationCompat.Action.Builder(
            R.drawable.ic_reply_icon,
            getString(R.string.label),
            replyPendingIntent
    )
            .addRemoteInput(remoteInput)
            // 1) allow generated replies
            .setAllowGeneratedReplies(true)
            .build()

    val noti = NotificationCompat.Builder(context, channelId)
            .setContentTitle("${messages.size} new messages with $sender")
            .setContentText(subject)
            .setSmallIcon(R.drawable.new_message)
            .setLargeIcon(aBitmap)
            // 2) set the style to MessagingStyle
            .setStyle(
                    NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                            .addMessage(messages[0].text, messages[0].time, messages[0].sender)
                            .addMessage(messages[1].text, messages[1].time, messages[1].sender)
            )
            // 3) add an action with RemoteInput
            .extend(NotificationCompat.WearableExtender().addAction(action)).build()
    

Java

    // Create an intent for the reply action
    Intent replyIntent = new Intent(this, ReplyActivity.class);
    PendingIntent replyPendingIntent =
       PendingIntent.getActivity(this, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    // Create the reply action and add the remote input
    NotificationCompat.Action action =
       new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
       getString(R.string.label), replyPendingIntent)
      .addRemoteInput(remoteInput)
       // 1) allow generated replies
      .setAllowGeneratedReplies(true)
      .build();

    Notification noti = new NotificationCompat.Builder()
        .setContentTitle(messages.length + " new messages with " + sender.toString())
        .setContentText(subject)
        .setSmallIcon(R.drawable.new_message)
        .setLargeIcon(aBitmap)
        // 2) set the style to MessagingStyle
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
        .addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())
        .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))
        // 3) add an action with RemoteInput
        .extend(new WearableExtender().addAction(action)).build();
    

Cómo agregar imágenes a una notificación de MessagingStyle

Puedes agregar imágenes a un mensaje de notificación si configuras el tipo de MIME apropiado y colocas el URI a la imagen en el método NotificationCompat.MessagingStyle.Message.setData().

A continuación, se incluye fragmento de código para establecer datos del tipo imagen en una notificación:

Kotlin

    val message = NotificationCompat.MessagingStyle.Message("sticker", 1, "Jeff")
            .setData("image/png", stickerUri)

    val notification = NotificationCompat.Builder(context, channelId)
            .setStyle(
                    NotificationCompat.MessagingStyle("Me").addMessage(message)
            )
            .build()
    

Java

    NotificationCompat.MessagingStyle.Message message = new Message("sticker", 1, "Jeff")
       .setData("image/png", stickerUri);

    NotificationCompat notification = new NotificationCompat.Builder()
        .setStyle(new NotificationCompat.MessagingStyle("Me")
            .addMessage(message))
        .build();
    

En el fragmento de código anterior, la variable stickerUri es un URI dirigido a una ubicación de acceso público, como se describe aquí.

Cómo construir una notificación de BigTextStyle

Puedes insertar contenido de texto extendido en tu notificación mediante BIG_TEXT_STYLE. En un dispositivo de mano, los usuarios pueden ver el contenido extendido expandiendo la notificación. En un dispositivo wearable, el contenido expandido es visible de forma predeterminada cuando usas BigTextStyle.

Para agregar el contenido extendido a tu notificación, llama a setStyle() en el objeto NotificationCompat.Builder, pasándole una instancia de BigTextStyle o InboxStyle.

Por ejemplo, el siguiente código agrega una instancia de NotificationCompat.BigTextStyle a la notificación del evento a fin de incluir su descripción completa (que puede incluir más espacio que el proporcionado para setContentText()).

Kotlin

    // Specify the 'big view' content to display the long
    // event description that may not fit the normal content text.
    val bigStyle = NotificationCompat.BigTextStyle().run {
        bigText(eventDescription)
    }

    val notificationBuilder = NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_event)
            .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.notif_background))
            .setContentTitle(eventTitle)
            .setContentText(eventLocation)
            .setContentIntent(viewPendingIntent)
            .addAction(R.drawable.ic_map, getString(R.string.map), mapPendingIntent)
            .setStyle(bigStyle)
    

Java

    // Specify the 'big view' content to display the long
    // event description that may not fit the normal content text.
    BigTextStyle bigStyle = new NotificationCompat.BigTextStyle();
    bigStyle.bigText(eventDescription);

    NotificationCompat.Builder notificationBuilder =
        new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_event)
            .setLargeIcon(BitmapFactory.decodeResource(
                    getResources(), R.drawable.notif_background))
            .setContentTitle(eventTitle)
            .setContentText(eventLocation)
            .setContentIntent(viewPendingIntent)
            .addAction(R.drawable.ic_map,
                    getString(R.string.map), mapPendingIntent)
            .setStyle(bigStyle);
    

Ten en cuenta que puedes agregar una imagen de ícono grande a cualquier notificación con el método setLargeIcon(). Sin embargo, estos íconos aparecen como imágenes de fondo grandes en un wearable y no se ven bien, ya que se ajustan para adaptarse a la pantalla del wearable. Para agregar una imagen de fondo específica de wearable a una notificación, consulta Cómo agregar funciones específicas de wearables a una notificación. Para obtener más información sobre cómo diseñar notificaciones con imágenes grandes, consulta los principios de diseño de Wear OS.

Cómo construir una notificación de MediaStyle

Puedes usar la clase NotificationCompat.MediaStyle para incluir el control de reproducción en tus notificaciones. Para que la IU del sistema identifique una notificación que represente una sesión multimedia activa y responda en consecuencia (por ejemplo, mostrando la portada del álbum en la pantalla bloqueada), adjunta un MediaSession.Token usando el método setMediaSession(MediaSession.Token).

Nota: Si usas NotificationCompat.MediaStyle en una notificación local sin una sesión multimedia adjunta, el sistema muestra la notificación como una notificación normal y omite los detalles de estilo multimedia.