Vérifier les fonctionnalités spatiales

Les fonctionnalités spatiales peuvent changer à mesure que les utilisateurs interagissent avec votre application ou le système, ou même être modifiées par votre application elle-même (par exemple, en passant en mode Home Space ou Full Space). Pour éviter les problèmes, votre application doit vérifier les fonctionnalités spatiales pour déterminer quelles API sont compatibles avec l'environnement actuel.

Vérifier les fonctionnalités spatiales à l'aide de Jetpack Compose for XR

Jetpack Compose for XR crée un Composition Local pour vérifier les fonctionnalités spatiales. Utilisez-le pour vérifier si l'UI spatiale, l'audio spatial, les environnements, le passthrough ou les contenus 3D sont activés.

Vous pouvez utiliser LocalSpatialCapabilities.current pour vérifier si les fonctionnalités spatiales suivantes sont actuellement disponibles:

L'exemple suivant montre comment vérifier si l'UI spatiale est activée:

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

Vérifier les fonctionnalités spatiales à l'aide de SceneCore

Lorsque vous utilisez la bibliothèque SceneCore, vous devez créer une session. Une fois la session créée, appelez spatialCapabilities sur la session pour interroger les fonctionnalités spatiales actuellement disponibles.

Vous pouvez également choisir de vous abonner à un rappel, addSpatialCapabilitiesChangedListener, qui vous avertit lorsque les fonctionnalités spatiales ont changé.

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
    )
) {
    xrSession.scene.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
            SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT
    )
) {
    // ...
}

Voir aussi