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:
- Creare o aggiornare il progetto in base alle configurazioni Crea ed eseguire un'app indossabile.
- 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
:
-
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. } }
-
Crea un
AmbientLifecycleObserver
e registra l'osservatore. In genere, verrebbe utilizzato inonCreate()
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) // ... }
- Rimuovi l'osservatore chiamando
removeObserver()
, quando l'impostazione è sempre attiva non è più obbligatorio. Ad esempio, puoi chiamare questo metodo il metodoonDestroy()
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 aonEnterAmbient()
:- Se è impostato
deviceHasLowBitAmbient
, disattiva l'anti-aliasing, se possibile. - Se il criterio
burnInProtectionRequired
è impostato, sposta la visualizzazione periodicamente ed evita aree bianche e continue.
- Se è impostato
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.