parole chiave: wear,ambient,alwayson
Wear OS gestisce automaticamente il passaggio alla modalità a basso consumo per un'app attiva quando un utente non utilizza più lo smartwatch. Questa è la modalità Ambient del sistema. Se l'utente interagisce di nuovo con l'orologio entro un determinato periodo di tempo, Wear OS lo riporta all'app da dove aveva 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:
- Crea o aggiorna il progetto in base alle configurazioni nella pagina Creare e eseguire un'app per dispositivi indossabili.
- Aggiungi l'autorizzazione
WAKE_LOCK
al file Android Manifest:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Attivare la 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, questo viene utilizzato inonCreate()
o nel composable di primo livello se utilizzi Compose per Wear OS per consentire l'attivazione del 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 il comportamento sempre attivo non è più necessario. Ad esempio, puoi chiamare questo metodo nel metodoonDestroy()
della tua attività.
Le app sempre attive possono passare 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 configurare il timeout nelle impostazioni di sistema.
Se la tua app sempre attiva mostra informazioni su un'attività in corso dell'utente, ad esempio la riproduzione di musica o una sessione di allenamento, ti consigliamo di mantenere visibile l'attività in corso 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()
)
Modificare 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 questo
comportamento ignorando i metodi in
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 è impostato
burnInProtectionRequired
, sposta la visualizzazione periodicamente ed evita aree bianche solide.
- 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 è possibile ottenere questo risultato, consulta l'
Esercizio di esempio basato su compose su GitHub, che utilizza il composable AmbientAware
della libreria Horologist.