Notifications sur Wear OS

Les notifications affichées sur les montres ou sur les téléphones utilisent les mêmes API et ont la même structure.

Sur une montre, les notifications peuvent s'afficher de deux manières :

  1. Une application mobile crée une notification que le système associe automatiquement (en mode Pont) à la montre.
  2. Une appli connectée crée une notification.

Dans les deux cas, les développeurs utilisent la classe NotificationCompat.Builder pour créer des notifications. Lorsque vous créez des notifications avec la classe de compilateur, le système prend soin de les afficher correctement. Par exemple, lorsque vous envoyez des notifications à partir de votre application mobile, chacune d'elles apparaît sous la forme d'une carte dans le flux de notifications.

Consultez l'exemple suivant pour voir comment les notifications s'affichent.

cartes de notification

Figure 1. La même notification affichée sur un téléphone et sur une montre.

Pour obtenir de meilleurs résultats, utilisez l'une des sous-classes NotificationCompat.Style.

Remarque : Si vous utilisez RemoteViews, les notifications de mise en page personnalisées sont supprimées, et l'accessoire connecté n'affiche que le texte et les icônes.

Notifications recommandées pour les accessoires connectés

Définissez des notifications à développer, car elles constituent un excellent moyen de susciter l'intérêt des utilisateurs d'accessoires connectés. L'état réduit est affiché dans la barre de notification, ce qui permet d'y jeter un coup d'œil rapide. Si l'utilisateur appuie dessus, la notification se développe et offre une expérience immersive avec des contenus et des actions supplémentaires qu'il peut faire défiler.

Vous pouvez créer une notification à développer comme vous le feriez sur mobile avec n'importe quelle sous-classe NotificationCompat.Style. Par exemple, une notification standard utilisant NotificationCompat.MessagingStyle se présente comme suit :

notification à développer

Figure 2. Exemple de notification MessagingStyle sur Wear OS

Comme vous pouvez le voir, la notification comporte plusieurs actions qui sont empilées au bas de l'état développé.

Conseil : Si vos notifications contiennent une action de réponse (pour une application de chat, par exemple), vous pouvez améliorer leur comportement. Par exemple, vous pouvez autoriser les réponses par saisie vocale directement à partir de l'accessoire connecté ou les réponses textuelles prédéfinies avec setChoices(). Pour en savoir plus, consultez Ajouter le bouton de réponse.

Éviter les notifications en double

Par défaut, les notifications provenant d'une application pour téléphone associé sont "pontées" à toutes les montres associées. C'est une excellente option si aucune application connectée n'est installée.

Cependant, si vous créez une application pour montre autonome alors que vous disposez déjà d'une application pour téléphone associé, cela créera des notifications en double.

Wear OS offre la possibilité d'arrêter l'envoi de notifications en double avec les API Bridging. C'est particulièrement important pour les applications sur les appareils exécutant Wear OS 5 ou version ultérieure, car certaines notifications qui peuvent être ignorées sur un appareil mobile ne peuvent pas l'être sur l'appareil Wear OS. Pour en savoir plus, consultez Options de pontage des notifications.

Ajouter à une notification des fonctionnalités propres à l'accessoire connecté

Si vous devez ajouter à une notification des fonctionnalités propres à l'accessoire connecté, vous pouvez utiliser la classe NotificationCompat.WearableExtender pour spécifier les options. Pour utiliser cette API, procédez comme suit :

Remarque : Si vous utilisez la classe NotificationManager du framework, certaines fonctionnalités de NotificationCompat.WearableExtender ne répondent pas. Veillez donc à utiliser NotificationCompat.

Cet exemple montre comment définir une action spécifique à Wear sur la notification et comment définir l' ID de suppression. Lorsque la notification est ignorée, toutes les autres notifications ayant le même ID de refus sont ignorées sur la montre et sur le téléphone associé. Pour récupérer un ID de refus, utilisez 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()

Lancer l'application Téléphone depuis un wearable

Si vous utilisez des notifications associées, chaque notification inclut automatiquement un bouton permettant de lancer l'application sur le téléphone. Toutefois, si vous utilisez une notification locale créée sur la montre, procédez comme suit pour créer un bouton qui lance l'application sur le téléphone :

  1. Créez un Activity qui étend ConfirmationActivity.
  2. Utilisez RemoteActivityHelper dans le nouveau Activity pour lancer l'application Téléphone.
  3. Lorsque vous créez l'Intent pour lancer l'Activity à partir de la notification, définissez l'extra EXTRA_ANIMATION_TYPE sur OPEN_ON_PHONE_ANIMATION.
Cette approche guide l'utilisateur pour qu'il interagisse sur son téléphone et respecte les exigences de la plate-forme pour le lancement de processus en arrière-plan.

Remarque : Vous ne pouvez pas utiliser de BroadcastReceiver comme cible de l'action de notification.