Verifica las capacidades espaciales

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable

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:

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