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. L'app viene ripresa dopo che l'utente interagisce con lo smartwatch se è soddisfatta una delle seguenti condizioni:
- L'interazione utente si verifica entro un determinato periodo di tempo (prima del timeout).
- L'app dichiara e ha avviato un'attività in corso.
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 del sistema. 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 ed eseguire un'app per dispositivi indossabili.
-
(Necessaria solo su Wear OS 4 o versioni precedenti) Aggiungi l'autorizzazione
WAKE_LOCK
al file manifest di Android:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>
Attivare la modalità sempre attiva
A partire da Wear OS 6, le app con targetSdkVersion
impostato su 36 o versioni successive sono sempre attive per impostazione predefinita.
Queste app rimangono visibili durante la modalità Ambient del sistema per un periodo di tempo limitato senza alcuna configurazione.
Se il valore targetSdkVersion
della tua app è inferiore a 36 o se la tua app deve essere eseguita su Wear OS 5 o versioni precedenti,
utilizza la classe AmbientLifecycleObserver
per renderla sempre attiva.
Rispondere agli eventi della modalità Ambient utilizzando la classe AmbientLifecycleObserver
Le app possono anche utilizzare la classe
AmbientLifecycleObserver
per reagire direttamente agli eventi della modalità Ambient:
-
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 valore 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à.
Aggiornare il testo dell'ora utilizzando il widget OraTesto
A partire da Wear OS 6, il widget TimeText
è compatibile con la modalità Ambient. Se la tua app deve aggiornare un testo dell'ora ogni minuto durante la modalità Ambient, puoi utilizzare il widget TimeText
senza utilizzare AmbientLifecycleObserver
.
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'esperienza utente in modalità Ambient
Per impostazione predefinita, quando implementi la funzionalità 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. Valuta la possibilità di mostrare solo le informazioni fondamentali in modalità Ambient e fornire maggiori dettagli quando l'utente entra in modalità interattiva.
- Mantieni almeno l'85% dello schermo nero, rimuovi i riempimenti e utilizza i contorni per pulsanti e icone di grandi dimensioni.
- Evita di mostrare informazioni estranee, come branding e immagini di sfondo non funzionali.
- Mantieni gli elementi nella stessa posizione nelle modalità attive e sempre attive e mostra sempre l'ora.
- Modifica i contenuti in modo che vengano aggiornati meno di frequente. Ad esempio, mostrare i timer arrotondati al minuto più vicino anziché al secondo più vicino.
- Rimuovi o mostra l'interfaccia utente segnaposto per i contenuti alfanumerici che si aggiornano frequentemente, ad esempio distanza o tempo.
- Rimuovi gli indicatori di avanzamento che si aggiornano di frequente, ad esempio per gli anelli di conto alla rovescia e le sessioni multimediali.
- Quando entri in modalità sempre attiva, se l'utente si trovava in precedenza in una schermata di configurazione o impostazioni della tua app, ti consigliamo di mostrare una schermata più pertinente nella tua app.
- 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
- Evita di eseguire animazioni continue durante la modalità Ambient. A partire da Wear OS 5.1, gli animatori potrebbero interrompersi durante la modalità Ambient.
Elenco di controllo per la visualizzazione senza interruzioni
Potrebbero verificarsi situazioni in cui vuoi avere il massimo controllo sul display mentre il dispositivo passa da uno stato all'altro, ad esempio quando un'app per l'allenamento vuole evitare che il quadrante venga visualizzato sul display durante un allenamento. In questi casi, procedi nel seguente modo:
- Implementa l'interfaccia AmbientLifecycleObserver.AmbientLifecycleCallback.
- Crea un nuovo layout a basso consumo da utilizzare quando il dispositivo è in modalità Ambient del sistema.
- Per tutta la durata dell'allenamento, implementa un'attività in corso.
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.