O Wear OS processa automaticamente a transição para o modo de baixo consumo de energia em apps ativos quando o usuário não está mais usando o relógio. Isso é chamado de modo ambiente do sistema. Se o usuário interagir novamente com o relógio dentro de um determinado período, o Wear OS vai abrir o app novamente na tela que o usuário estava usando.
Para casos de uso específicos, por exemplo, quando um usuário quer ver a frequência cardíaca e o ritmo durante um executar—você também pode controlar o que é exibido no modo ambiente de baixo consumo de energia. Os apps para Wear OS que são executados nos modos ambiente e interativo são chamados de apps sempre ativados.
Tornar um app constantemente visível afeta a duração da bateria. Por isso, considere esse impacto ao adicionar esse recurso ao app.
Configurar seu projeto
Para oferecer suporte ao modo ambiente, siga estas etapas:
- Crie ou atualize seu projeto com base nas configurações da página Criar e executar um app para wearables.
- Adicione a permissão
WAKE_LOCK
ao arquivo de manifesto do Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Ativar o modo sempre ativado
Para usar a classe
AmbientLifecycleObserver
, faça o seguinte:
-
Implemente a interface
AmbientLifecycleObserver.AmbientLifecycleCallback
, como no exemplo abaixo. Nesta fase, os métodos estão vazios, mas mais adiante no guia você vai conhecer detalhes das mudanças você deve verificar se está acessando a visualização para entrar e sair do modo ambiente.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. } }
-
Crie um
AmbientLifecycleObserver
e registre o observador. Normalmente, isso seriam usados noonCreate()
ou no elemento combinável de nível superior, se você estiver usando o Compose para Wear OS, para permitem que o comportamento sempre ativado seja ativado durante todo o ciclo de vida da atividade.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- Remova o observador chamando
removeObserver()
quando o estado sempre ativado não é mais necessário. Por exemplo, ele pode ser chamado no métodoonDestroy()
da sua atividade.
Os apps sempre ativados podem ser movidos para o segundo plano
A partir do Wear OS 5, o sistema move os apps sempre ativados para o segundo plano depois que eles ficam visíveis no modo ambiente por um determinado período. Os usuários podem defina o tempo limite nas configurações do sistema.
Se o app sempre ativado exibir informações sobre uma tarefa em andamento do usuário, como reprodução de música ou uma sessão de treino. Talvez você queira manter a atividade em andamento fica visível até que a tarefa termine. Para isso, use a API Ongoing Activity para publicar uma notificação em andamento vinculada à sua atividade sempre ativa.
Para que o sistema reconheça a atividade em andamento, a intent de toque da notificação em andamento precisa apontar para a atividade sempre ativa, conforme mostrado no snippet de código abaixo:
// 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()
)
Modificar a aparência no modo ambiente
Por padrão, ao implementar a opção "sempre ativado", a tela não muda de
aparência quando o relógio entra no modo ambiente. É possível modificar isso
do cliente substituindo os métodos
AmbientLifecycleCallback
:
Para ajudar a economizar bateria, faça o seguinte:
- Ilumine menos pixels e deixe a maior parte da tela preta. Considere mostrando apenas informações críticas no modo ambiente e fornecem mais detalhes quando o usuário entra no modo interativo.
- Ajuste todo o conteúdo para atualizações menos frequentes. Por exemplo, mostrar timers para o minuto mais próximo em vez do segundo mais próximo.
- No
AmbientDetails
transmitido paraonEnterAmbient()
:- Se
deviceHasLowBitAmbient
estiver definido, desative a suavização sempre que possível. - Se
burnInProtectionRequired
estiver definido, mude a visualização periodicamente e evite áreas brancas sólidas.
- Se
Ao usar o Compose para Wear OS, recomendamos o uso destes métodos de callback para atualizar o estado, o que permite ao sistema recompor seu corretamente a interface do usuário.
Para ver um exemplo de como fazer isso, confira a biblioteca do Compose
Exemplo de exercício (link em inglês) no GitHub, que usa o AmbientAware
combinável da biblioteca do Horologist.