keywords: wear,ambient,alwayson
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. Si l'utilisateur interagit de nouveau avec la montre dans un certain délai, Wear OS lui permet de revenir à l'application qu'il a quittée.
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 économie d'énergie (mode Veille). 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.
- Ajoutez l'autorisation
WAKE_LOCK
au fichier manifeste Android :
<uses-permission android:name="android.permission.WAKE_LOCK" />
Activer le mode Always-on
Pour utiliser la classe
AmbientLifecycleObserver
, procédez comme suit:
-
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é.
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'apparence visuelle en mode ambiant
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é et laissez la majeure partie de l'écran noir. Envisagez de n'afficher que les informations critiques en mode ambiant et fournissez plus de détails lorsque l'utilisateur passe en mode interactif.
- 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.
- 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
Lorsque vous utilisez Compose pour Wear OS, nous vous recommandons d'utiliser ces méthodes de rappel pour mettre à jour l'état, ce qui permet au système de recomposer votre UI de manière appropriée.
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.