Os recursos espaciais podem variar entre dispositivos e mudar à medida que os usuários interagem com seu app ou o sistema. Eles podem até ser alterados pelo próprio app, por exemplo, ao passar para o Espaço Compacto ou o Espaço Ampliado. Para evitar problemas, seu app precisa verificar os recursos 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 local de composição para verificar os recursos espaciais. Use isso para verificar se a interface espacial, o áudio espacial, os ambientes, a passagem ou o conteúdo 3D estão ativados.
Você pode usar LocalSpatialCapabilities.current para verificar se os seguintes
recursos espaciais estão disponíveis no momento:
isSpatialUiEnabled: indica se o aplicativo pode criar elementos de interface espacial (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 passagem.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, você precisa criar uma sessão. Depois que
a sessão for criada, use spatialCapabilities da
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 passagem.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 os recursos 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 mesclagem para verificar os recursos de exibição do dispositivo
No Android XR, os headsets XR e os óculos XR com fio têm recursos de hardware variados, especialmente 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 mesclagem preferido usado pelo dispositivo. A API DisplayBlendMode fornece o recurso de modo de mesclagem
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 mesclagem:
ADDITIVE: o conteúdo virtual é adicionado ao mundo real adicionando os 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 mesclando os valores de pixel com base no componente alfa.NO_DISPLAY: a mesclagem está indisponível no dispositivo.
Use XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() from the
Jetpack XR Runtime library to check what type of blend mode is being used
and make adjustments as needed.
Consulte também
- Criar uma sessão
- Transição entre HSM e FSM
- Adicionar ambientes espaciais ao app
- Adicionar modelos 3D ao app