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, per un utente che desidera visualizzare il battito cardiaco e l'andatura durante correre, puoi anche controllare cosa viene visualizzato nella modalità Ambient a basso consumo. App per Wear OS eseguite Sia nelle modalità Ambient che in quelle interattive sono chiamate app sempre attive.

Fare in modo che un'app sia costantemente visibile influisce sulla durata della batteria, quindi tienine conto 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 lo AmbientLifecycleObserver, segui questi passaggi:

  1. Implementa lo AmbientLifecycleObserver.AmbientLifecycleCallback, come nell'esempio seguente. In questa fase, i metodi sono vuoti, ma più avanti nella guida verranno forniti dettagli sulle modifiche devi assicurarti di eseguire la 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 sono 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 questo scopo, usa l'API Ontaining Activity per pubblicare una notifica continua collegata alla tua attività sempre attiva.

Affinché il sistema riconosca l'attività in corso, l'intent al tocco della notifica deve rimandare alla tua attività sempre attiva, come mostrato in il 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 si implementa la modalità sempre attiva, lo schermo non cambia quando sullo smartwatch viene attivata la 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. Prendi in considerazione che mostrano solo informazioni fondamentali in modalità Ambient e forniscono che indica quando l'utente attiva la modalità interattiva.
  • Regola qualsiasi contenuto per aggiornamenti meno frequenti. Ad esempio, mostra i timer al minuto più vicino anziché al secondo più vicino.
  • In AmbientDetails oggetto passato a onEnterAmbient():
      .
    • Se il criterio deviceHasLowBitAmbient è impostato, disabilita l'anti-aliasing ove 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 usare questi metodi di callback per aggiornare lo stato, in modo che il sistema possa dell'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.