Verificar os recursos espaciais

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:

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.

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