Notificações no Wear OS

As notificações em smartwatches usam as mesmas APIs e têm a mesma estrutura das notificações em smartphones.

As notificações podem aparecer em um smartwatch de duas maneiras:

  1. O app para dispositivos móveis cria uma notificação e o sistema conecta automaticamente essa notificação ao smartwatch.
  2. Um app para wearables cria uma notificação.

Em ambos os cenários, os desenvolvedores usam a classe NotificationCompat.Builder para criar notificações. Ao criar notificações com a classe builder, o sistema se encarrega de mostrar as notificações corretamente. Por exemplo, quando você emite uma notificação do seu app para dispositivos móveis, cada notificação é mostrada como um card no fluxo de notificações.

O exemplo abaixo mostra como as notificações aparecem.

cards de notificação

Figura 1. A mesma notificação mostrada no smartphone e no smartwatch.

Use uma das subclasses NotificationCompat.Style para ter os melhores resultados.

Observação: Usar RemoteViews remove as notificações de layouts personalizados e o wearable só mostra o texto e os ícones.

Observação:as notificações de intent de tela cheia (setFullScreenIntent()) e a permissão USE_FULL_SCREEN_INTENT não são compatíveis com o Wear OS.

Notificações recomendadas para wearables

Use as notificações que podem ser abertas como ponto de partida para todas as notificações, porque elas são uma ótima maneira de manter os usuários de wearables engajados. O estado recolhido aparece na bandeja de notificações para proporcionar uma experiência simples e fácil de entender. Se o usuário tocar nela, a notificação é aberta, revelando uma experiência imersiva e rolável de conteúdo e outras ações.

É possível Criar uma notificação que pode ser aberta da mesma forma que em um dispositivo móvel com qualquer uma das NotificationCompat.Style subclasses. Por exemplo, uma notificação padrão usando NotificationCompat.MessagingStyle tem esta aparência:

notificação que pode ser aberta

Figura 2. Exemplo de uma notificação MessagingStyle no Wear OS.

Você pode perceber que a notificação tem várias Ações empilhadas na parte de baixo do estado aberto.

Dica: caso suas notificações incluam uma ação "Responder" (como para um app de mensagens ), é possível melhorar o comportamento da notificação. Por exemplo, você pode ativar respostas de entrada de texto por voz diretamente do wearable ou de respostas de texto predefinidas com setChoices(). Para mais informações, leia Adicionar o botão de resposta.

Evitar notificações duplicadas

Por padrão, as notificações são transmitidas de um aplicativo para smartphones associados para qualquer smartwatch pareado. Essa é uma ótima opção se você não tiver um app para wearables instalado.

No entanto, se você criar um app para smartwatch independente e um app para smartphone complementar, eles vão criar notificações duplicadas.

O Wear OS oferece uma maneira de interromper as notificações duplicadas com as APIs Bridging. Isso é particularmente importante para apps em dispositivos que executam o Wear OS 5 ou mais recente, porque algumas notificações que podem ser dispensadas em um dispositivo móvel não podem ser dispensadas no dispositivo Wear OS. Para mais informações, leia Opções de ponte para notificações.

Adicionar recursos específicos de wearable a uma notificação

Se você precisar adicionar recursos específicos do wearable a uma notificação, use a NotificationCompat.WearableExtender classe para especificar as opções. Para usar essa API, siga as etapas abaixo:

Observação: Se você usar o NotificationManager do framework, alguns recursos do NotificationCompat.WearableExtender não vão funcionar. Use NotificationCompat.

Este exemplo mostra como definir uma ação específica do Wear na notificação e também definir o ID de dispensa. Quando a notificação é dispensada, todas as outras notificações com o mesmo ID são dispensadas no relógio e no smartphone associado. Para acessar um ID de dispensa, use getDismissalId().

// This intent will be fired as a result of the user clicking the "Open on watch" action.
// However, it executes on the phone, not on the watch. Typically, the Activity should then use
// RemoteActivityHelper to then launch the correct activity on the watch.
val intent = Intent(context, LaunchOnWearActivity::class.java)
val wearPendingIntent = PendingIntent.getActivity(
    context,
    wearRequestCode,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val openOnWatchAction = NotificationCompat.Action.Builder(
    R.drawable.watch,
    "Open on watch",
    wearPendingIntent
)
    .build()

val wearableExtender = NotificationCompat.WearableExtender()
    // This action will only be shown on the watch, not on the phone.
    // Actions added to the Notification builder directly will not be shown on the watch,
    // because one or more actions are defined in the WearableExtender.
    .addAction(openOnWatchAction)
    // This synchronizes dismissals between watch and phone.
    .setDismissalId(chatId)

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(wearableExtender)
    .build()

Iniciar o app para smartphone em um dispositivo wearable

Se você estiver usando notificações em ponte, qualquer notificação incluirá automaticamente um botão para iniciar o app no smartphone. No entanto, se você estiver usando uma notificação local, criada no relógio, use as seguintes etapas para criar um botão que inicia o app no smartphone:

  1. Crie um novo Activity que estenda ConfirmationActivity.
  2. Use RemoteActivityHelper na nova Activity para iniciar o app para smartphone.
  3. Ao criar o Intent para iniciar o Activity na notificação, defina o extra EXTRA_ANIMATION_TYPE como OPEN_ON_PHONE_ANIMATION.
Essa abordagem orienta o usuário a interagir no smartphone e segue os requisitos da plataforma para iniciar processos em segundo plano.

Observação:não é possível usar um BroadcastReceiver como destino da ação de notificação.