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 de áudio e
display

Diferentes tipos de óculos de áudio e display têm recursos diferentes. Por exemplo, embora todos os óculos de áudio e display ofereçam experiências de áudio por voz, apenas os óculos de display 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 perfeita em vários dispositivos, planeje sua 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 direcionadas a dispositivos específicos.

Entender o ciclo de vida das atividades projetadas

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

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

Confira um detalhamento dos principais eventos, com frases de destaque para interações específicas para atividades projetadas em óculos de áudio e display:

  • 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á sendo iniciada 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 entrada de touchpad ou botão.
    • 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 a entrada.
  • 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 é desativada, geralmente passando para onPause() ou onStop(). Em contraste, o ciclo de vida da atividade projetada não muda quando a tela dos óculos é ativada ou desativada. Esse comportamento significa que a atividade projetada continua sendo executada no estado "Iniciado" ou "Retomado", mesmo quando a tela está desativada, 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 usual.

Entender como a conscientização do usuário afeta a atividade projetada

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

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

Nessas situações, o usuário está ciente de que os óculos de áudio e display estão ativos e respondendo, mesmo que não estejam 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 de touchpad ou está recebendo o envio de entrada principal.

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

Entender atividades e contextos projetados

Os óculos de áudio e display são tratados como um dispositivo conectado que estende os recursos do smartphone de um usuário. Um contexto projetado é um com reconhecimento de dispositivo Context que permite que os apps interajam com o hardware em um dispositivo de óculos conectado, como sensores, câmera ou microfone, em vez do hardware do smartphone. Ao desenvolver experiências para óculos de áudio e display, o 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 smartphone: se uma parte do app fora da atividade projetada (como uma atividade ou um serviço de smartphone) precisar acessar o hardware dos óculos, ela precisará receber explicitamente um contexto projetado. Para fazer isso, use o createProjectedDeviceContext() método.

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

Entender APIs com reconhecimento de dispositivo

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 no dispositivo do smartphone host:

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