O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Estilos de notificação no Wear

O Wear OS by Google é compatível com estilos de notificação para melhorar a experiência do usuário em smartwatches.

Os estilos mais comuns de notificação são:

  • BIG_TEXT_STYLE;
  • BIG_PICTURE_STYLE;
  • INBOX_STYLE;
  • MESSAGING_STYLE

As seções abaixo explicam como adicionar MESSAGING_STYLE e BIG_TEXT_STYLE às suas notificações. Para incorporar outros estilos de notificação, veja a amostra Notificações do Wear (link em inglês).

Construir uma notificação MessagingStyle

Se você tem um app de mensagens de chat, suas notificações devem usar NotificationCompat.MessagingStyle, que foi adicionado ao Android 7.0. O Wear usa as mensagens de chat incluídas em uma notificação MessagingStyle (consulte addMessage()) para fornecer uma experiência semelhante à de um app de chat na notificação expandida.

Observação: as notificações expandidas de MessagingStyle exigem que você tenha pelo menos a versão 1.5.0.2861804 do app associado do Wear no smartphone Android pareado.

Resposta inteligente

O Wear introduz a Resposta inteligente para notificações do MessagingStyle. A "Resposta inteligente" fornece ao usuário opções contextualmente relevantes e tocáveis na notificação expandida e em RemoteInput. Elas aumentam a lista fixa de opções que o desenvolvedor fornece em RemoteInput usando o método setChoices().

A "Resposta inteligente" oferece aos usuários uma maneira rápida (toque único), discreta (sem falar em voz alta), privada (as mensagens recebidas por um usuário nunca deixam o smartwatch) e confiável (sem necessidade de conexão de Internet) de responder a mensagens de chat.

As respostas inteligentes são geradas por um modelo de machine learning no próprio smartwatch, usando o contexto fornecido pela notificação MessagingStyle. Nenhum dado de notificação do usuário é enviado aos servidores Google para gerar respostas inteligentes.

Para ativar a "Resposta inteligente" para sua ação de notificação, é necessário fazer o seguinte:

  1. Use NotificationCompat.MessagingStyle.
  2. Chame o método setAllowGeneratedReplies(true) para a ação de notificação.
  3. Verifique se a ação de notificação tem um RemoteInput definido (onde as respostas serão armazenadas).

O exemplo a seguir mostra como criar uma notificação MessagingStyle com respostas inteligentes.

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

Adicionar imagens a uma notificação MessagingStyle

Você pode adicionar imagens a uma mensagem de notificação configurando o tipo MIME adequado e colocando o URI na imagem no método NotificationCompat.MessagingStyle.Message.setData().

Este é um snippet de código para definir dados de imagem de tipo em uma notificação:

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

No snippet de código acima, a variável stickerUri é um URI que indica um local acessível publicamente, conforme descrito neste link.

Construir uma notificação BigTextStyle

É possível inserir conteúdo de texto estendido na notificação usando o BIG_TEXT_STYLE. Em um dispositivo portátil, os usuários podem ver o conteúdo estendido expandindo a notificação. Em um dispositivo wearable, o conteúdo expandido fica visível por padrão ao usar o BigTextStyle.

Para adicionar o conteúdo estendido à sua notificação, chame setStyle() no objeto NotificationCompat.Builder, transmitindo uma instância de BigTextStyle ou InboxStyle.

Por exemplo, o código a seguir adiciona uma instância de NotificationCompat.BigTextStyle à notificação de evento para incluir a descrição completa do evento, que inclui mais texto do que cabe no espaço fornecido 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);
    

Você pode adicionar uma imagem de ícone grande a qualquer notificação usando o método setLargeIcon(). No entanto, esses ícones aparecem como imagens grandes de plano de fundo em um wearable e não ficam com uma boa aparência, porque são aumentados para caber na tela. Para adicionar a uma notificação uma imagem de plano de fundo específica para wearables, consulte Adicionar recursos específicos de wearable a uma notificação. Para mais informações sobre o design de notificações com imagens grandes, veja os Princípios de design do Wear OS (link em inglês).

Construir uma notificação MediaStyle

Você pode usar a classe NotificationCompat.MediaStyle para incluir controle de reprodução em suas notificações. Para que a IU do sistema identifique uma notificação que representa uma sessão de mídia ativa e responda adequadamente (por exemplo, mostrando a capa do álbum na tela de bloqueio), anexe um MediaSession.Token usando o método setMediaSession(MediaSession.Token).

Observação: se você usar NotificationCompat.MediaStyle em uma notificação local sem uma sessão de mídia anexada, o sistema exibirá a notificação como sendo normal e ignorará os detalhes do estilo de mídia.