Notifiche su Wear OS

Le notifiche sugli smartwatch utilizzano le stesse API e hanno la stessa struttura delle notifiche sugli smartphone.

Le notifiche possono essere visualizzate su uno smartwatch in due modi:

  1. Un'app mobile crea una notifica e il sistema la trasferisce automaticamente allo smartwatch.
  2. Un'app per dispositivi indossabili crea una notifica.

In entrambi gli scenari, utilizza la NotificationCompat.Builder classe per creare le notifiche. Quando crei le notifiche con la classe Builder, il sistema si occupa di visualizzarle correttamente. Ad esempio, quando invii una notifica da dalla tua app mobile, ogni notifica viene visualizzata come una scheda nel flusso di notifiche.

Esamina l'esempio seguente per vedere come vengono visualizzate le notifiche.

notification-cards

Figura 1. La stessa notifica visualizzata su uno smartphone e su uno smartwatch.

Per risultati ottimali, utilizza una delle NotificationCompat.Style sottoclassi.

Nota: l'utilizzo di RemoteViews rimuove i layout personalizzati dalle notifiche e il wearable visualizza solo il testo e le icone.

Nota: le notifiche di intent a schermo intero (setFullScreenIntent()) e l'autorizzazione USE_FULL_SCREEN_INTENT non sono supportate su Wear OS.

Notifiche consigliate per i wearable

Utilizza le notifiche espandibili come punto di partenza per tutte le notifiche, in quanto sono un ottimo modo per coinvolgere gli utenti di wearable. Lo stato compresso viene visualizzato nel riquadro delle notifiche per un'esperienza breve e rapida. Se l'utente tocca la notifica, questa si espande, rivelando un'esperienza immersiva e scorrevole di contenuti e azioni aggiuntivi.

Puoi creare una notifica espandibile allo stesso modo in cui faresti su un dispositivo mobile, utilizzando una qualsiasi delle NotificationCompat.Style sottoclassi. Ad esempio, una notifica standard che utilizza NotificationCompat.MessagingStyle ha il seguente aspetto:

expandable-notification

Figura 2. Esempio di una notifica MessagingStyle su Wear OS.

Puoi notare che la notifica ha più azioni impilate nella parte inferiore dello stato espanso.

Suggerimento: se le notifiche includono un'azione "Rispondi", ad esempio per un'app di messaggistica puoi migliorarne il comportamento. Ad esempio, puoi attivare le risposte di input vocale direttamente dal wearable o le risposte di testo predefinite con setChoices(). Per saperne di più, consulta Aggiungere il pulsante Rispondi.

Evitare notifiche duplicate

Per impostazione predefinita, le notifiche vengono trasferite da un'app complementare per smartphone a tutti gli smartwatch associati. Questa è un' ottima opzione se non hai installato un'app per dispositivi indossabili.

Tuttavia, se crei un'app dell'orologio autonoma e un'app complementare per smartphone accoppiato, le app creano notifiche duplicate.

Wear OS offre un modo per interrompere le notifiche duplicate con le API di bridging. Questo è particolarmente importante per le app sui dispositivi che eseguono Wear OS 5 o versioni successive, perché alcune notifiche che possono essere ignorate su un dispositivo mobile non possono essere ignorate sul dispositivo Wear OS. Per saperne di più, consulta Opzioni di bridging per le notifiche.

Aggiungere funzionalità specifiche per wearable a una notifica

Se devi aggiungere funzionalità specifiche per wearable a una notifica, puoi utilizzare la NotificationCompat.WearableExtender classe per specificare le opzioni. Per utilizzare questa API:

Nota: se utilizzi NotificationManager del framework, alcune funzionalità di NotificationCompat.WearableExtender non funzionano, quindi assicurati di utilizzare NotificationCompat.

Questo esempio mostra come impostare un'azione specifica per Wear sulla notifica e anche l' ID di ignoramento. Quando la notifica viene ignorata, tutte le altre notifiche con lo stesso ID di ignoramento vengono ignorate sullo smartwatch e sullo smartphone accoppiato. Per recuperare un ID di ignoramento, utilizza 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()

Avviare l'app per smartphone da un dispositivo indossabile

Se utilizzi le notifiche in condivisione, ogni notifica include automaticamente un pulsante per avviare l'app sullo smartphone. Tuttavia, se utilizzi una notifica locale, creata sullo smartwatch, segui questi passaggi per creare un pulsante che avvia l'app sullo smartphone:

  1. Crea un nuovo Activity che estenda ConfirmationActivity.
  2. Utilizza RemoteActivityHelper nella nuova Activity per avviare l'app per smartphone.
  3. Quando crei il Intent per avviare il Activity dalla notifica, imposta l'extra EXTRA_ANIMATION_TYPE su OPEN_ON_PHONE_ANIMATION.
Questo approccio guida l'utente a interagire sullo smartphone e rispetta i requisiti della piattaforma per l'avvio dei processi in background.

Nota: non puoi utilizzare un BroadcastReceiver come target dell'azione di notifica.