App sempre attive e modalità Ambient di sistema

Wear OS gestisce automaticamente il passaggio alla modalità a basso consumo per un'app attiva quando un utente non ha non usano più lo smartwatch. Questa è chiamata modalità ambient di sistema. Se l'utente interagisce con lo smartwatch entro un determinato lasso di tempo, Wear OS riporta l'utente nell'app dove l'avevano interrotto.

Per casi d'uso specifici, ad esempio un utente che vuole vedere la frequenza cardiaca e il ritmo durante una corsa, puoi anche controllare cosa viene visualizzato nella modalità Ambient a basso consumo. Le app Wear OS in esecuzione sia in modalità Ambient che interattiva sono chiamate app sempre attive.

La visibilità costante di un'app influisce sulla durata della batteria, quindi prendi in considerazione questo impatto quando aggiungi questa funzionalità alla tua app.

Configura il progetto

Per supportare la modalità Ambient:

  1. Creare o aggiornare il progetto in base alle configurazioni Crea ed eseguire un'app indossabile.
  2. Aggiungi l'autorizzazione WAKE_LOCK al file manifest Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Abilita modalità sempre attiva

Per utilizzare la classe AmbientLifecycleObserver:

  1. Implementa l'interfaccia AmbientLifecycleObserver.AmbientLifecycleCallback, come nell'esempio seguente. In questa fase, i metodi sono vuoti, ma più avanti nella guida vengono forniti dettagli sulle modifiche che devi apportare alla visualizzazione per entrare e uscire dalla modalità Ambient.

    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. Crea un AmbientLifecycleObserver e registra l'osservatore. In genere, verrebbe utilizzato in onCreate() o nel componibile di primo livello se si utilizza Compose per Wear OS, per consentono di abilitare il comportamento sempre attivo durante tutto il ciclo di vita dell'attività.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. Rimuovi l'osservatore chiamando removeObserver(), quando l'impostazione è sempre attiva non è più obbligatorio. Ad esempio, puoi chiamare questo metodo il metodo onDestroy() di attività.

Le app sempre attive possono essere spostate in background

A partire da Wear OS 5, il sistema sposta le app sempre attive in background dopo che sono state visibili in modalità Ambient per un determinato periodo di tempo. Gli utenti possono e configurare il timeout nelle impostazioni di sistema.

Se l'app sempre attiva mostra informazioni su un'attività utente in corso, ad esempio riproduzione di musica o una sessione di allenamento; è consigliabile mantenere l'attività in corso visibile fino al termine dell'attività. A tale scopo, utilizza l'API Attività in corso per pubblicare una notifica in corso collegata alla tua attività sempre attiva.

Affinché il sistema riconosca l'attività in corso, l'intent tocco della notifica in corso deve puntare all'attività sempre attiva, come mostrato nel seguente snippet di codice:

// 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()
)

Modifica l'aspetto visivo in modalità Ambient

Per impostazione predefinita, quando viene implementato il display sempre attivo, lo schermo non cambia aspetto quando lo smartwatch entra in modalità Ambient. Puoi modificare il comportamento predefinito eseguendo l'override dei metodi nel AmbientLifecycleCallback.

Per risparmiare energia:

  • Illumina meno pixel e lascia la maggior parte dello schermo nera. Valuta la possibilità di mostrare solo le informazioni fondamentali in modalità Ambient e fornire maggiori dettagli quando l'utente entra in modalità interattiva.
  • Modifica i contenuti in modo che vengano aggiornati meno di frequente. Ad esempio, mostra i timer al minuto più vicino anziché al secondo più vicino.
  • Nell'oggetto AmbientDetails passato a onEnterAmbient():
    • Se è impostato deviceHasLowBitAmbient, disattiva l'anti-aliasing, se possibile.
    • Se il criterio burnInProtectionRequired è impostato, sposta la visualizzazione periodicamente ed evita aree bianche e continue.

Quando utilizzi Compose per Wear OS, ti consigliamo di utilizzare questi metodi di callback per aggiornare lo stato, in modo che il sistema possa ricomporre l'interfaccia utente in modo appropriato.

Per un esempio di come eseguire questa operazione, consulta la documentazione Esempio di esercizio su GitHub, che utilizza AmbientAware componibile dalla raccolta Horologist.