Las capacidades espaciales pueden variar según el dispositivo y cambiar a medida que los usuarios interactúan con tu app o el sistema. Incluso la propia app puede cambiarlos, por ejemplo, cuando se pasa al espacio principal o al espacio completo. Para evitar problemas, tu app debe verificar las capacidades espaciales para determinar qué APIs se admiten en el entorno actual.
Verifica las capacidades espaciales con Jetpack Compose para XR
Jetpack Compose para XR crea un CompositionLocal para verificar las capacidades espaciales. Úsala para verificar si la IU espacial, el audio espacial, los entornos, la transferencia o el contenido 3D están habilitados.
Puedes usar LocalSpatialCapabilities.current para verificar si las siguientes capacidades espaciales están disponibles:
isSpatialUiEnabled: Indica si la aplicación puede crear elementos de la IU espacial (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() }
Verifica las capacidades espaciales con SceneCore
Cuando uses la biblioteca de SceneCore, deberás crear una sesión. Una vez que se cree la sesión, usa spatialCapabilities de scene de la sesión para consultar qué capacidades espaciales están disponibles actualmente.
SPATIAL_3D_CONTENT: La actividad puede crear contenido en 3D.APP_ENVIRONMENT: La actividad puede establecer su propio entorno.EMBED_ACTIVITY: La actividad puede incorporar espacialmente otra actividad.PASSTHROUGH_CONTROL: La actividad puede habilitar o inhabilitar la transferencia.SPATIAL_AUDIO: La actividad puede usar audio espacial.SPATIAL_UI: La actividad puede espacializarse por sí misma (por ejemplo, agregando un panel espacial).
También puedes suscribirte a una devolución de llamada, addSpatialCapabilitiesChangedListener, que te notifica cuando cambian las capacidades espaciales.
// 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) ) { // ... }
Usa el modo de fusión para verificar las capacidades de visualización del dispositivo
En Android XR, los visores de RE y los lentes de RE con cable tienen diferentes capacidades de hardware, en especial en lo que respecta al tipo de pantalla. Es posible que debas adaptar
los colores de la IU de tu app y los objetos renderizados para maximizar la visibilidad, que
puede verse influenciada por el tipo de pantalla y el modo de fusión preferido que usa
el dispositivo. La API de DisplayBlendMode proporciona la capacidad del modo de fusión del dispositivo para la renderización. Usa esta API para determinar cómo se agrega el contenido virtual
al mundo real.
Estos son algunos de los tipos de modos de fusión que debes tener en cuenta:
ADDITIVE: El contenido virtual se agrega al mundo real sumando los valores de píxeles de cada uno de los componentes rojo, verde y azul. Se ignora el canal alfa y los píxeles negros aparecen transparentes.ALPHA_BLEND: El contenido virtual se agrega al mundo real mediante la combinación alfa de los valores de píxeles según el componente alfa.NO_DISPLAY: No se admite la combinación en el dispositivo.
Usa XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() de la
biblioteca de entorno de ejecución de XR de Jetpack para verificar qué tipo de modo de fusión se está usando
y realizar los ajustes necesarios.
Consulta también
- Crea una sesión
- Transición entre HSM y FSM
- Agrega entornos espaciales a tu app
- Agrega modelos 3D a tu app