Ao longo do dia, os óculos de áudio ou de exibição podem
perder a conexão com o dispositivo host (como o smartphone do usuário) ou ficar
temporariamente indisponíveis se forem removidos. Para
considerar esses tipos de mudanças na disponibilidade do dispositivo, o app pode usar a
API XR Device Availability, que consolida os indicadores de disponibilidade do dispositivo nos
valores padrão do Android Lifecycle.State. Use essa API para ajudar a gerenciar
o roteamento de áudio, a ativação por palavra-chave e saber quando esperar a entrada do usuário com base
na disponibilidade dos óculos.
Entender os estados do ciclo de vida
A tabela a seguir mostra como os indicadores de disponibilidade do dispositivo são mapeados para os valores de Lifecycle.State.
Estado do ciclo de vida |
Status do dispositivo |
Descrição |
|---|---|---|
|
Criado |
O objeto de ciclo de vida é criado, mas ainda não é observado. |
|
Inativo |
O serviço está conectado, mas o usuário não está usando o dispositivo. |
|
Ativo |
O usuário está usando o dispositivo. |
|
Desconectado |
O dispositivo está desconectado ou a conexão de serviço foi perdida. |
Verificar e monitorar a disponibilidade de dispositivos
Para verificar e monitorar a disponibilidade de um dispositivo, use um contexto projetado junto com o estado do ciclo de vida para determinar como o app deve lidar com cada caso:
// In your phone activity or service, check for projected device connection state before // attempting to create a projected device context and get the device lifecycle. ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext()) .flatMapLatest { isConnected -> if (isConnected) { try { // Create the projected device context on connection val projectedContext = ProjectedContext.createProjectedDeviceContext(context) val xrDevice = XrDevice.getCurrentDevice(projectedContext) // Get the device lifecycle xrDevice.getLifecycle().currentStateFlow } catch (e: IllegalStateException) { flowOf(Lifecycle.State.DESTROYED) } } else { flowOf(Lifecycle.State.DESTROYED) } } .collect { state -> when (state) { Lifecycle.State.STARTED -> { /* Device is available (worn) */ } Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ } Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ } else -> { /* Handle other states */ } } } }
Pontos principais sobre o código
- Verifique uma conexão: antes de acessar o ciclo de vida do dispositivo, chame
ProjectedContext.isProjectedDeviceConnectedpara verificar se o dispositivo projetado está conectado ao dispositivo host. - Receba um
ProjectedContext: chameProjectedContext.createProjectedDeviceContextsomente depois de verificar a conexão e transmita esse contexto para sua instânciaXrDevice. - Processar a invalidação de contexto: um novo
deviceIdé gerado sempre que um dispositivo projetado se conecta. Quando o estado atingeDESTROYED, oProjectedContextatual é inválido. Pare de usar imediatamente e aguarde uma nova conexão. - Otimize a bateria e os recursos: processe a funcionalidade do app de maneira adequada
com base no estado do ciclo de vida para preservar os recursos do sistema e reduzir o consumo
de bateria. Por exemplo, libere recursos específicos dos óculos, como um fluxo de dados da câmera, quando o estado passar de
STARTEDparaCREATED. O estadoCREATEDindica que o dispositivo não está mais sendo usado. Portanto, é essencial interromper esses processos para evitar o consumo elevado da bateria e promover a privacidade do usuário.