Wear OS gère automatiquement le passage en mode économie d'énergie pour une application active lorsqu'un utilisateur n'utilise plus sa montre. Il s'agit du mode ambiant système. L'application est réactivée après l'interaction de l'utilisateur avec la montre si l'une des conditions suivantes est remplie:
- L'interaction utilisateur se produit dans un certain délai (avant l'expiration du délai d'inactivité).
- L'application déclare et a démarré une activité en cours.
Dans des cas d'utilisation spécifiques, par exemple lorsqu'un utilisateur souhaite consulter sa fréquence cardiaque et son allure pendant une course, vous pouvez également contrôler le contenu affiché en mode Veille du système. Les applications Wear OS qui s'exécutent en mode Veille et en mode interactif sont des applications toujours activées (ou Always-on).
Rendre une application constamment visible a un impact sur l'autonomie de la batterie. Par conséquent, tenez-en compte lorsque vous ajoutez cette fonctionnalité à votre application.
Configurer votre projet
Pour prendre en charge le mode ambiant, procédez comme suit :
- Créez ou mettez à jour votre projet en fonction des configurations de la page Créer et exécuter une appli connectée.
-
(Uniquement nécessaire sur Wear OS 4 ou version antérieure) Ajoutez l'autorisation
WAKE_LOCK
au fichier manifeste Android:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>
Activer le mode Always-on
À partir de Wear OS 6, les applications dont la valeur targetSdkVersion
est définie sur 36 ou plus sont toujours activées par défaut.
Ces applications restent visibles en mode Veille du système pendant une durée limitée, sans aucune configuration.
Si la valeur targetSdkVersion
de votre application est inférieure à 36 ou si votre application doit s'exécuter sur Wear OS 5 ou version antérieure, utilisez la classe AmbientLifecycleObserver
pour activer le mode toujours activé.
Réagir aux événements du mode Veille à l'aide de la classe AmbientLifecycleObserver
Les applications peuvent également utiliser la classe
AmbientLifecycleObserver
pour réagir directement aux événements du mode Veille:
-
Implémentez l'interface
AmbientLifecycleObserver.AmbientLifecycleCallback
, comme dans l'exemple suivant. À ce stade, les méthodes sont vides. Toutefois, plus loin dans le guide, vous découvrirez les modifications à apporter à la visualisation pour activer et désactiver le mode ambiant.Kotlin
val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback { override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) { // ... Called when moving from interactive mode into ambient mode. } override fun onExitAmbient() { // ... Called when leaving ambient mode, back into interactive mode. } override fun onUpdateAmbient() { // ... Called by the system in order to allow the app to periodically // update the display while in ambient mode. Typically the system will // call this every 60 seconds. } }
-
Créez un
AmbientLifecycleObserver
et enregistrez l'observateur. En règle générale, cette option est utilisée dansonCreate()
ou dans le composable de premier niveau si vous utilisez Compose pour Wear OS, afin de permettre l'activation du comportement always-on tout au long du cycle de vie de l'activité.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- Supprimez l'observateur en appelant
removeObserver()
lorsque le comportement toujours activé n'est plus nécessaire. Par exemple, vous pouvez appeler cette méthode dans la méthodeonDestroy()
de votre activité.
Mettre à jour le texte de l'heure à l'aide du widget TimeText
À partir de Wear OS 6, le widget TimeText
est compatible avec le mode Veille. Si votre application ne doit mettre à jour qu'un texte d'heure toutes les minutes en mode Veille, vous pouvez simplement utiliser le widget TimeText
sans utiliser AmbientLifecycleObserver
.
Les applications toujours activées peuvent passer en arrière-plan
À partir de Wear OS 5, le système déplace les applications toujours activées en arrière-plan après qu'elles ont été visibles en mode Veille pendant une certaine période. Les utilisateurs peuvent configurer le délai avant expiration dans les paramètres système.
Si votre application toujours active affiche des informations sur une tâche utilisateur en cours (par exemple, la lecture de musique ou une séance d'entraînement), vous pouvez conserver l'activité en cours visible jusqu'à la fin de la tâche. Pour ce faire, utilisez l'API Ongoing Activity pour publier une notification en cours liée à votre activité permanente.
Pour que le système reconnaisse l'activité en cours, l'intent tactile de la notification en cours doit pointer vers votre activité toujours active, comme indiqué dans l'extrait de code suivant:
// Create a pending intent that point to your always-on activity
val touchIntent =
PendingIntent.getActivity(
context,
0,
Intent(context, MyAlwaysOnActivity::class.java),
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
// ...
.setOngoing(true)
val ongoingActivity =
OngoingActivity.Builder(
applicationContext, NOTIFICATION_ID, notificationBuilder
)
// ...
.setTouchIntent(touchIntent)
.build()
ongoingActivity.apply(applicationContext)
notificationManager.notify(
NOTIFICATION_ID,
notificationBuilder.build()
)
Modifier l'expérience utilisateur en mode Veille
Par défaut, lorsque vous activez le mode always-on, l'apparence de l'écran ne change pas lorsque la montre passe en mode ambiant. Vous pouvez modifier ce comportement en remplaçant les méthodes dans AmbientLifecycleCallback
.
Pour économiser de l'énergie, procédez comme suit :
- Limitez la luminosité. Envisagez de n'afficher que les informations critiques en mode ambiant et fournissez plus de détails lorsque l'utilisateur passe en mode interactif.
- Laissez au moins 85% de l'écran noir, supprimez les remplissages et utilisez des contours pour les boutons et les grandes icônes.
- Évitez d'afficher des informations superflues, telles que des images de fond et un branding non fonctionnels.
- Maintenez les éléments dans la même position dans les modes actif et Always-on, et affichez toujours l'heure.
- Ajustez le contenu pour réduire la fréquence des mises à jour. Par exemple, affichez les minuteurs à la minute la plus proche plutôt qu'à la seconde la plus proche.
- Supprimez ou affichez l'UI d'espace réservé pour le contenu alphanumérique qui est mis à jour fréquemment, comme la distance ou l'heure.
- Supprimez les indicateurs de progression qui s'actualisent fréquemment, comme les anneaux de compte à rebours et les sessions multimédias.
- Lorsque vous accédez au mode toujours activé, si l'utilisateur se trouvait auparavant sur un écran de configuration ou de paramètres de votre application, envisagez d'afficher un écran plus pertinent dans votre application.
- Dans l'objet
AmbientDetails
transmis àonEnterAmbient()
:- Si
deviceHasLowBitAmbient
est défini, désactivez l'anticrénelage dans la mesure du possible. - Si
burnInProtectionRequired
est défini, déplacez régulièrement la visualisation et évitez les zones blanches unies.
- Si
- Évitez d'exécuter une animation continue en mode Veille. À partir de Wear OS 5.1, les animateurs peuvent cesser de s'exécuter en mode Veille.
Checklist pour l'affichage sans interruption
Il peut arriver que vous souhaitiez contrôler au maximum l'affichage lorsque l'appareil passe d'un état à un autre, par exemple lorsqu'une application d'entraînement souhaite éviter que le cadran ne s'affiche à l'écran pendant un entraînement. Dans ce cas, procédez comme suit:
- Implémentez l'interface AmbientLifecycleObserver.AmbientLifecycleCallback.
- Créez une nouvelle mise en page basse consommation à utiliser lorsque l'appareil est en mode Veille système.
- Pendant toute la durée de l'entraînement, implémentez une activité en cours.
Pour savoir comment procéder, consultez l'
exemple d'exercice basé sur Compose sur GitHub, qui utilise le composable AmbientAware
à partir de la bibliothèque Horologist.