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 à utiliser leur 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.

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 de la page Créer et exécuter une 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 les AmbientLifecycleObserver, procédez comme suit:

  1. 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.
        }
    }
  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 comportement toujours activé 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 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 d'activité 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, lors de la mise en œuvre du mode Always-on, l'écran ne modifie pas sa lorsque la montre passe en mode Veille. 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.

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 voir un exemple, consultez la Exemple d'exercice sur GitHub, qui utilise AmbientAware de la bibliothèque Horologist.