Applications permanentes et mode ambiant du système

Wear OS gère automatiquement le passage en mode économie d'énergie pour une application active lorsqu'un utilisateur leur montre. Il s'agit du mode ambiant système. Si l’utilisateur interagit avec la montre dans un certain délai, Wear OS renvoie l'utilisateur vers l'application, ils se sont arrêtés.

Pour des cas d'utilisation spécifiques, par exemple lorsqu'un utilisateur souhaite consulter sa fréquence cardiaque et son allure pendant une course—vous peut également contrôler ce qui s'affiche en mode Veille à faible consommation d'énergie. Les applications Wear OS qui s'exécutent en mode ambiant et interactif sont appelées applications toujours activées.

Rendre une application constamment visible a un impact sur l'autonomie de la batterie. Pensez-y lorsque vous ajoutez cette fonctionnalité à votre application.

Configurer votre projet

Pour prendre en charge le mode ambiant, procédez comme suit :

  1. Créez ou mettez à jour votre projet en fonction des configurations Créer et exécuter une page d'appli connectée.
  2. Ajoutez l'autorisation WAKE_LOCK au fichier manifeste Android :
<uses-permission android:name="android.permission.WAKE_LOCK" />

Activer le mode Always-on

Pour utiliser le <ph type="x-smartling-placeholder"></ph> AmbientLifecycleObserver, procédez comme suit:

  1. Mettez en œuvre le AmbientLifecycleObserver.AmbientLifecycleCallback, comme dans l'exemple suivant. À ce stade, les méthodes sont vides, mais vous trouverez plus loin dans le guide des détails sur les modifications vous devez vous assurer que vous accédez à la visualisation pour entrer et sortir du mode Veille.

    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.
        }
    }
  2. Créez un AmbientLifecycleObserver et enregistrez l'observateur. En général, cela est utilisé dans onCreate() ou dans le composable de premier niveau si vous utilisez Compose pour Wear OS, pour permettent d'activer le comportement permanent 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)
    
      // ...
    }
    
  3. Supprimez l'observateur en appelant removeObserver() lorsque le mode Always-on ce comportement n'est plus nécessaire. Par exemple, vous pouvez appeler cette méthode dans la méthode onDestroy() de votre activité.

Les applications toujours activées peuvent passer en arrière-plan

À partir de Wear OS 5, le système fait passer les applications toujours activées en arrière-plan après elles sont visibles en mode ambiant pendant un certain temps. Les utilisateurs peuvent configurer le délai avant expiration dans les paramètres système.

Si votre application toujours activée affiche des informations sur une tâche utilisateur en cours, comme l'écoute 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 d'activité en cours liée à votre activité permanente.

Pour que le système reconnaisse l'activité en cours, l'état l'intent tactile d'une notification doit pointer vers votre activité permanente, 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 implémentez le mode Always-on, l'écran ne modifie pas lorsque la montre passe en mode Veille. Vous pouvez modifier ce en remplaçant les méthodes dans le AmbientLifecycleCallback

Pour économiser de l'énergie, procédez comme suit :

  • Limitez la luminosité et laissez la majeure partie de l'écran noir. Envisagez d'utiliser n'afficher que les informations critiques en mode ambiant, et fournir plus lorsque l'utilisateur passe en mode interactif.
  • Ajustez le contenu pour réduire la fréquence des mises à jour. Par exemple, afficher les minuteurs à la minute la plus proche au lieu de la seconde la plus proche.
  • Dans le 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 la visualisation régulièrement et évitez les zones blanches unies.

Lorsque vous utilisez Compose pour Wear OS, nous vous recommandons d'utiliser les méthodes de rappel suivantes pour mettre à jour l'état, ce qui permet au système de recomposer votre l'UI de façon appropriée.

Pour voir un exemple, consultez la Exemple d'exercice sur GitHub, qui utilise AmbientAware de la bibliothèque Horologist.