Os recursos espaciais podem mudar à medida que os usuários interagem com o app ou o sistema, ou até mesmo pelo próprio app, por exemplo, ao entrar no espaço doméstico ou no espaço total. Para evitar problemas, o 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 essa opção para verificar se a interface espacial, o áudio espacial, os ambientes, o encaminhamento 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 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, chame
getSpatialCapabilities
na sessão para consultar quais recursos espaciais
estão disponíveis no momento.
SPATIAL_CAPABILITY_3D_CONTENT
: a atividade pode criar conteúdos em 3D.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: a atividade pode definir o próprio ambiente.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: a atividade pode incorporar espacialmente outra atividade.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: a atividade pode ativar ou desativar o encaminhamento.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: a atividade pode usar áudio espacial.SPATIAL_CAPABILITY_UI
: a atividade pode se espacializar, por exemplo, adicionando um painel espacial.
Também é possível se inscrever em um callback, addSpatialCapabilitiesChangedListener
, que notifica você quando os recursos
espaciais mudam.
val xrSession = Session.create(this)
// Example 1: check if enabling passthrough mode is allowed
if (xrSession.getSpatialCapabilities().hasCapability(
SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL)) {
xrSession.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: Multiple capability flags can be checked simultaneously:
if (xrSession.getSpatialCapabilities().hasCapability(
SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)) {
// ...
}
// Example 3: Create a spatialized panel if/when spatialization UI becomes available
xrSession.addSpatialCapabilitiesChangedListener((capabilities) -> {
if (capabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)){
Subspace{
SpatialPanel(...)
}
}
});
Veja também
- Criar uma sessão
- Transição entre HSM e FSM
- Adicionar ambientes espaciais ao app
- Adicionar modelos 3D ao app