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 au mode Espace Chez moi ou Espace Complet). 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 pour XR

Jetpack Compose pour XR crée un Composition Local pour vérifier les fonctionnalités spatiales. Utilisez-le pour vérifier si l'UI spatiale, le son spatial, les environnements, le passthrough ou le contenu 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 getSpatialCapabilities 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é.

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

Voir aussi