Wear OS controla automáticamente el cambio al modo de bajo consumo de una app activa cuando un usuario deja de usar el reloj. Eso se denomina modo ambiente del sistema. Si el usuario vuelve a interactuar con el reloj dentro de un período determinado, Wear OS lo lleva a la última app que usó.
Para casos de uso específicos, como un usuario que desea ver la frecuencia cardíaca y el ritmo durante una carrera, también puedes controlar lo que se muestra en el modo ambiente de bajo consumo. Las apps para Wear OS que se ejecutan en los modos interactivo y ambiente se denominan apps siempre activas.
Hacer que una app sea visible constantemente afecta la duración de la batería, así que ten en cuenta ese impacto cuando agregues esta función a tu aplicación.
Cómo configurar tu proyecto
Para admitir el modo ambiente, sigue estos pasos:
- Crea o actualiza tu proyecto según la configuración de la página Cómo crear y ejecutar una app para wearables.
- Agrega el permiso
WAKE_LOCK
al archivo de manifiesto de Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Cómo habilitar el modo siempre activo
Para usar la clase AmbientLifecycleObserver
, haz lo siguiente:
-
Implementa la interfaz
AmbientLifecycleObserver.AmbientLifecycleCallback
, como en el siguiente ejemplo. En esta etapa, los métodos están vacíos, pero más adelante en la guía se proporcionan detalles de los cambios debes asegurarte de realizar la visualización para entrar al modo ambiente y salir de él.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
y registra el observador. Por lo general, este se usará enonCreate()
o en el elemento componible de nivel superior si usas Compose para Wear OS Permiten que el comportamiento siempre activo se habilite durante todo el ciclo de vida de la actividad.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- Quita el observador llamando a
removeObserver()
cuando ya no se requiera el comportamiento siempre activo. Por ejemplo, puedes llamar a este método en el métodoonDestroy()
de tu actividad.
Las apps siempre activas pueden pasar a segundo plano
A partir de Wear OS 5, el sistema mueve las apps siempre activas al segundo plano después de que sean visibles en el modo ambiente durante un período determinado. Los usuarios pueden configurar el tiempo de espera en la configuración del sistema.
Si tu app siempre activa muestra información sobre una tarea en curso del usuario, como la reproducción de música o una sesión de entrenamiento, te recomendamos que mantengas visible la actividad en curso hasta que finalice la tarea. Para ello, usa la API de Ongoing Activity para publicar una notificación continua vinculada a tu actividad siempre activa.
Para que el sistema reconozca la actividad en curso, el estado la intent táctil de la notificación debe apuntar a tu actividad siempre activa, como se muestra en el siguiente fragmento de código:
// 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()
)
Cómo modificar la apariencia visual en el modo ambiente
De forma predeterminada, cuando se implementa el modo siempre activo, la pantalla no cambia su
cuando el reloj entra en el modo ambiente. Puedes modificar este comportamiento anulando los métodos en AmbientLifecycleCallback
.
Para ahorrar energía, haz lo siguiente:
- Ilumina menos píxeles y deja la mayor parte de la pantalla negra. Considera mostrar solo la información crítica en el modo ambiente y proporciona más detalles cuando el usuario entre en el modo interactivo.
- Ajusta el contenido para que se actualice con menos frecuencia. Por ejemplo, muestra los cronómetros al minuto y no al segundo más cercano.
- En
AmbientDetails
que se pasa aonEnterAmbient()
:- Si se configura
deviceHasLowBitAmbient
, inhabilita el suavizado de contorno siempre que sea posible. - Si se establece
burnInProtectionRequired
, cambia la visualización periódicamente y evita las áreas blancas sólidas.
- Si se configura
Cuando uses Compose para Wear OS, te recomendamos que uses estos métodos de devolución de llamada para actualizar el estado, lo que le permite al sistema recomponer tu la IU de forma adecuada.
Para ver un ejemplo de cómo se puede lograr esto, consulta el archivo basado en Compose.
Ejemplo de ejercicio en GitHub, que usa AmbientAware
componible de la biblioteca Horologist.