Verifica las capacidades espaciales

Las capacidades espaciales pueden cambiar a medida que los usuarios interactúan con tu app o el sistema, o incluso la propia app puede cambiarlas (por ejemplo, pasar al espacio principal o al espacio completo). Para evitar problemas, la app debe verificar las capacidades espaciales para determinar qué APIs son compatibles con el entorno actual.

Cómo verificar las capacidades espaciales con Jetpack Compose para XR

Jetpack Compose para XR crea un elemento Composition Local para verificar las capacidades espaciales. Úsalo para verificar si están habilitados la IU espacial, el audio espacial, los entornos, la transferencia o el contenido 3D.

Puedes usar LocalSpatialCapabilities.current para verificar si las siguientes funciones espaciales están disponibles actualmente:

En el siguiente ejemplo, se muestra cómo verificar si la IU espacial está habilitada.

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

Cómo verificar las capacidades espaciales con SceneCore

Cuando uses la biblioteca de SceneCore, deberás crear una sesión. Una vez que se crea la sesión, llama a getSpatialCapabilities en la sesión para consultar qué capacidades espaciales están disponibles actualmente.

También puedes suscribirte a una devolución de llamada, addSpatialCapabilitiesChangedListener, que te notifique cuando cambien las capacidades espaciales.

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(...)
      }
   }
});

Consulta también