Mantenere la tua app visibile su Wear

Wear OS gestisce automaticamente il passaggio alla modalità a basso consumo di un'app attiva quando un utente non usa più il proprio smartwatch. Questa modalità è chiamata modalità Ambient di sistema. Se l'utente interagisce di nuovo con lo smartwatch entro un determinato periodo di tempo, Wear OS lo riporta nell'app da dove l'aveva interrotto.

Per casi d'uso specifici, ad esempio un utente che vuole visualizzare battito cardiaco e velocità durante una corsa, puoi anche controllare cosa viene visualizzato nella modalità Ambient a basso consumo. Le app per Wear OS eseguite in modalità Ambient e interattiva sono chiamate app sempre attive.

Rendere un'app costantemente visibile influisce sulla durata della batteria, quindi tieni conto di questo impatto quando aggiungi questa funzionalità all'app.

Configura il progetto

Per supportare la modalità Ambient, svolgi i seguenti passaggi:

  1. Crea o aggiorna il tuo progetto in base alle configurazioni nella pagina Crea ed esegui 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 il corso AmbientLifecycleObserver, segui questi passaggi:

  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 da apportare alla visualizzazione per attivare 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, viene utilizzata in onCreate() o nell'elemento componibile di primo livello se utilizzi Compose per Wear OS, per consentire l'attivazione del comportamento sempre attivo durante 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 il comportamento sempre attivo non è più richiesto. Ad esempio, puoi chiamare questo metodo nel metodo onDestroy() della tua attività.

Modificare l'aspetto visivo in modalità Ambient

Per impostazione predefinita, quando implementi la modalità Sempre acceso, lo schermo non cambia il suo aspetto quando lo smartwatch entra in modalità Ambient. Puoi modificare questo comportamento eseguendo l'override dei metodi in AmbientLifecycleCallback.

Per risparmiare energia:

  • Illumina meno pixel e lascia nero gran parte dello schermo. Valuta la possibilità di mostrare solo informazioni critiche in modalità Ambient e fornire ulteriori dettagli quando l'utente attiva la modalità interattiva.
  • Modifica i contenuti per aggiornamenti meno frequenti. Ad esempio, mostra i timer al minuto più vicino anziché al secondo più vicino.
  • Nell'oggetto AmbientDetails passato a onEnterAmbient():
    • Se il criterio deviceHasLowBitAmbient è impostato, disabilita l'anti-aliasing se possibile.
    • Se il criterio burnInProtectionRequired è impostato, sposta periodicamente la visualizzazione ed evita aree bianche in tinta unita.

Quando utilizzi Compose per Wear OS, ti consigliamo di usare questi metodi di callback per aggiornare lo stato, in modo che il sistema possa ricomporre la UI in modo appropriato.

Per un esempio di come si può ottenere questo risultato, dai un'occhiata al Esempio di esercizio basato sulla composizione su GitHub, che utilizza il componibile AmbientAware della libreria Horologist.