Planejar a compatibilidade com diferentes tipos de óculos de áudio e de exibição

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Óculos com áudio e
tela

Os diferentes tipos de óculos com áudio e com tela têm recursos distintos. Por exemplo, embora todos os óculos com áudio e com tela ofereçam experiências de áudio por voz, apenas os óculos com tela têm uma tela em que o app pode mostrar interfaces criadas com o Jetpack Compose Glimmer.

Para criar uma experiência do usuário integrada em vários dispositivos, planeje o Activity para óculos para verificar diferentes recursos do dispositivo. Essa abordagem simplifica o desenvolvimento, permitindo que você crie uma atividade que adapta o comportamento, em vez de várias atividades voltadas para dispositivos específicos.

Entender o ciclo de vida das atividades projetadas

A atividade que você cria para óculos com áudio e óculos com tela não é executada diretamente no dispositivo, mas é projetada nele por um dispositivo host (como o smartphone do usuário). As atividades dedicadas que você cria para essa finalidade são atividades projetadas. O ciclo de vida das atividades projetadas é baseado no ciclo de vida padrão, mas também inclui várias diferenças importantes que dão suporte aos recursos de diferentes tipos de óculos com áudio e óculos com tela.

Figura 1. Os eventos principais no ciclo de vida das atividades projetadas.

Confira um resumo dos principais eventos, com destaque para as interações específicas de atividades projetadas para óculos com áudio e óculos com tela:

  • onCreate()
    • Chamado quando a atividade projetada é criada.
    • Inicialize a interface do Jetpack Compose Glimmer do app e outros componentes aqui.
  • onStart()
    • Chamado quando a atividade projetada está começando e o usuário está ciente do app.
  • onResume()
    • Chamado quando a atividade projetada recupera o foco. Enquanto a atividade está em foco, ela é interativa e pode consumir entradas do touchpad ou de botões.
    • Chamado quando os óculos são colocados de volta (colocados), depois de terem sido retirados da cabeça (retirados).
  • onPause()
    • Chamado quando a atividade projetada perde o foco, mas o usuário ainda está ciente do app. Enquanto a atividade está fora de foco, ela não é interativa e para de consumir entradas.
  • onStop()
    • Chamado quando o sistema acredita que o usuário não está mais ciente do seu app.
    • Chamado quando os óculos são removidos da cabeça (retirados).
  • onDestroy()
    • Chamado quando a atividade projetada está prestes a ser destruída. Quando isso é chamado, o sistema libera todos os recursos vinculados à atividade.

Entender como o estado de exibição afeta o ciclo de vida da atividade projetada

Em uma Activity padrão, o estado do ciclo de vida muda quando a tela do dispositivo é desligada, geralmente passando para onPause() ou onStop(). Por outro lado, o ciclo de vida da atividade projetada não muda quando a tela dos óculos é ligada ou desligada. Esse comportamento significa que a atividade projetada continua em execução no estado "Iniciada" ou "Retomada", mesmo quando a tela está desligada, o que permite que as experiências de áudio do app continuem sem interrupção.

Outras mudanças de estado da atividade acionadas por diferentes eventos do sistema e do usuário se comportam da maneira habitual.

Entender como o reconhecimento do usuário afeta sua atividade projetada

Um usuário pode estar ciente da sua atividade projetada, mesmo que ela não esteja visível. Percepção se refere a todas as maneiras como um usuário pode perceber e interagir com as experiências do app, incluindo:

  • Ouvir áudio, feedback audível ou outras indicações sonoras.
  • Ações do app que acionam um LED voltado ao usuário, como um indicador de privacidade se o app acessa a câmera ou o microfone.

Nessas situações, o usuário sabe que os óculos com áudio ou com tela estão ativos e respondendo, mesmo que não esteja olhando para uma tela:

  • O estado onStart() para atividades projetadas significa que a atividade está ativa.
  • O estado onResume() significa que a atividade é interativa e pode receber entrada do touchpad ou está recebendo o envio de entrada principal.

Enquanto o usuário estiver ciente do app, a atividade vai permanecer ativa e em primeiro plano. Se o sistema não detectar nenhum indicador de reconhecimento por um curto período, ele vai remover a atividade do primeiro plano e, por fim, acionar onStop().

Entender as atividades e os contextos projetados

Os óculos com áudio e com tela são tratados como um dispositivo conectado que amplia os recursos do smartphone do usuário. Um contexto projetado é um Context que reconhece o dispositivo e permite que os apps interajam com o hardware de um óculos conectado, como sensores ou câmera, em vez do hardware do smartphone. Ao desenvolver experiências para óculos com áudio e óculos com tela, seu app precisa usar um contexto projetado para acessar o hardware dos óculos.

Um contexto projetado pode ser concedido automaticamente ao app, dependendo do contexto da atividade de chamada:

  • Para atividades projetadas: se o código do app estiver sendo executado na atividade projetada, o contexto da atividade já será um contexto projetado. Nesse cenário, as chamadas feitas nessa atividade já podem acessar o hardware dos óculos.

  • Para apps ou serviços de app Telefone: se uma parte do app fora da atividade projetada (como uma atividade ou um serviço de app Telefone) precisar acessar o hardware dos óculos, ela precisará receber explicitamente um contexto projetado. Para fazer isso, use o método createProjectedDeviceContext().

Para mais informações, consulte Usar um contexto projetado para acessar o hardware em óculos com áudio e óculos com tela.

Noções básicas sobre APIs que reconhecem dispositivos

Algumas APIs padrão do Android mudam o hardware do dispositivo que acessam dependendo do Context da atividade de chamada. Quando essas APIs recebem um contexto projetado, elas acessam o hardware dos óculos em vez do hardware do smartphone host:

  • CameraManager: acessa a câmera nos óculos.
  • SensorManager: recupera dados do sensor (por exemplo, dados do giroscópio ou do acelerômetro) dos óculos.
  • AudioManager: gerencia streams de áudio, volume e roteamento nos óculos.