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:
isSpatialUiEnabled
: Indica si la aplicación puede crear elementos de IU espaciales (por ejemplo,SpatialPanel
).isContent3dEnabled
: Indica si la aplicación puede crear objetos 3D.isAppEnvironmentEnabled
: Indica si la aplicación puede configurar el entorno.isPassthroughControlEnabled
: Indica si la aplicación puede controlar el estado de transferencia.isSpatialAudioEnabled
: Indica si la aplicación puede usar audio espacial.
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.
SPATIAL_CAPABILITY_3D_CONTENT
: La actividad puede crear contenido en 3D.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: La actividad puede establecer su propio entorno.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: La actividad puede incorporar espacialmente otra actividad.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: La actividad puede habilitar o inhabilitar el pase.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: La actividad puede usar audio espacial.SPATIAL_CAPABILITY_UI
: La actividad puede espacializarse, p.ej., agregando un panel espacial.
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
- Cómo crear una sesión
- Transición entre HSM y FSM
- Cómo agregar entornos espaciales a tu app
- Cómo agregar modelos 3D a tu app