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:
isSpatialUiEnabled
: indique si l'application peut créer des éléments d'UI spatiaux (par exemple,SpatialPanel
).isContent3dEnabled
: indique si l'application peut créer des objets 3D.isAppEnvironmentEnabled
: indique si l'application peut définir l'environnement.isPassthroughControlEnabled
: indique si l'application peut contrôler l'état de passthrough.isSpatialAudioEnabled
: indique si l'application peut utiliser le son spatial.
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.
SPATIAL_CAPABILITY_3D_CONTENT
: l'activité peut créer des contenus 3D.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: l'activité peut définir son propre environnement.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: l'activité peut intégrer spatialement une autre activité.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: l'activité peut activer ou désactiver le passthrough.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: l'activité peut utiliser le son spatial.SPATIAL_CAPABILITY_UI
: l'activité peut se spatialiser, par exemple en ajoutant un panneau spatial.
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
- Créer une session
- Transition entre HSM et FSM
- Ajouter des environnements spatiaux à votre application
- Ajouter des modèles 3D à votre application