Manter seu app visível no Wear

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 com o smartwatch dentro de um período determinado, 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 o usuário quer conferir a frequência cardíaca e o ritmo durante uma corrida, também é possível controlar quais informações são exibidas 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 o recurso ao app.

Configurar seu projeto

Para oferecer suporte ao modo ambiente, siga estas etapas:

  1. Crie ou atualize seu projeto seguindo as configurações da página Criar e executar um app para wearables.
  2. 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:

  1. Implemente a interface AmbientLifecycleObserver.AmbientLifecycleCallback, como no exemplo abaixo. Nesta fase, os métodos estão vazios, mas mais adiante no guia vamos apresentar detalhes sobre quais mudanças você precisa fazer na 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.
          }
        }
        
  2. Crie um AmbientLifecycleObserver e registre o observador. Normalmente, isso é usado no onCreate() ou no combinável de nível superior, se você estiver usando o Compose para Wear OS, para permitir o comportamento sempre 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)
    
      // ...
    }
    
  3. Remova o observador chamando removeObserver() quando o comportamento sempre ativado não for mais necessário. Por exemplo, ele pode ser chamado no método onDestroy() da sua atividade.

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. Você pode modificar esse comportamento substituindo os métodos no AmbientLifecycleCallback.

Para ajudar a economizar bateria, faça o seguinte:

  • Ilumine menos pixels e deixe a maior parte da tela preta. Considere mostrar apenas informações importantes no modo ambiente e forneça mais detalhes quando o usuário entrar no modo interativo.
  • Ajuste todo o conteúdo para atualizações menos frequentes. Por exemplo, mostre os timers até o minuto mais próximo em vez do segundo mais próximo.
  • No objeto AmbientDetails transmitido para onEnterAmbient():
    • 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.

Ao usar o Compose para Wear OS, recomendamos o uso desses métodos de callback para atualizar o estado, permitindo que o sistema recomponha a interface corretamente.

Para conferir um exemplo de como fazer isso, confira o exemplo de exercício baseado no Compose no GitHub, que usa o elemento combinável AmbientAware da biblioteca Horologist (links em inglês).