Os recursos espaciais podem variar entre dispositivos e mudar conforme os usuários interagem com seu app ou o sistema. Eles podem até ser mudados pelo próprio app, por exemplo, ao passar para o Modo de Espaço Compacto ou Ampliado. Para evitar problemas, o app precisa verificar as funcionalidades espaciais para determinar quais APIs são compatíveis com o ambiente atual.
Verificar recursos espaciais usando o Jetpack Compose para XR
O Jetpack Compose para XR cria um Composition Local para verificar recursos espaciais. Use isso para verificar se a interface espacial, o áudio espacial, os ambientes, o modo ambiente ou o conteúdo 3D estão ativados.
Use LocalSpatialCapabilities.current para verificar se os seguintes recursos espaciais estão disponíveis:
isSpatialUiEnabled: indica se o aplicativo pode criar elementos espaciais da interface (por exemplo,SpatialPanel).isContent3dEnabled: indica se o aplicativo pode criar objetos 3D.isAppEnvironmentEnabled: indica se o aplicativo pode definir o ambiente.isPassthroughControlEnabled: indica se o aplicativo pode controlar o estado de transferência.isSpatialAudioEnabled: indica se o aplicativo pode usar áudio espacial.
O exemplo a seguir mostra como verificar se a interface espacial está ativada:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
Verificar recursos espaciais usando o SceneCore
Ao usar a biblioteca SceneCore, é necessário criar uma sessão. Depois que a sessão for criada, use spatialCapabilities do scene da sessão para consultar quais recursos espaciais estão disponíveis no momento.
SPATIAL_3D_CONTENT: a atividade pode criar conteúdo 3D.APP_ENVIRONMENT: a atividade pode definir o próprio ambiente.EMBED_ACTIVITY: a atividade pode incorporar espacialmente outra atividade.PASSTHROUGH_CONTROL: a atividade pode ativar ou desativar a transmissão direta.SPATIAL_AUDIO: a atividade pode usar áudio espacial.SPATIAL_UI: a atividade pode se espacializar (por exemplo, adicionando um painel espacial).
Você também pode se inscrever em um callback,
addSpatialCapabilitiesChangedListener, que notifica quando as
capacidades espaciais mudam.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
Usar o modo de fusão para verificar os recursos de exibição do dispositivo
No Android XR, os headsets e óculos XR com fio têm diferentes recursos de hardware, principalmente em relação ao tipo de tela. Talvez seja necessário adaptar as cores da interface do app e dos objetos renderizados para maximizar a visibilidade, que pode ser influenciada pelo tipo de tela e pelo modo de combinação preferido usado pelo dispositivo. A API DisplayBlendMode oferece a capacidade de modo de combinação do dispositivo para renderização. Use essa API para determinar como o conteúdo virtual é
adicionado ao mundo real.
Confira alguns tipos de modo de fusão:
ADDITIVE: o conteúdo virtual é adicionado ao mundo real com a inclusão dos valores de pixel para cada um dos componentes vermelho, verde e azul. O alfa é ignorado, e os pixels pretos aparecem transparentes.ALPHA_BLEND: o conteúdo virtual é adicionado ao mundo real combinando os valores de pixel com base no componente Alfa.NO_DISPLAY: a fusão não é compatível com o dispositivo.
Use XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() da
biblioteca Jetpack XR Runtime para verificar qual tipo de modo de combinação está sendo usado
e faça ajustes conforme necessário.
Veja também
- Criar uma sessão
- Transição entre HSM e FSM
- Adicionar ambientes espaciais ao app
- Adicionar modelos 3D ao app