Les capacités spatiales peuvent varier d'un appareil à l'autre et changer lorsque les utilisateurs interagissent avec votre application ou le système. Elles peuvent même être modifiées par votre application elle-même, par exemple en passant à l'espace personnel ou à l'espace complet. Pour éviter tout problème, votre application doit vérifier les capacités spatiales afin de déterminer quelles API sont compatibles dans l'environnement actuel.
Vérifier les capacités spatiales à l'aide de Jetpack Compose for XR
Jetpack Compose for XR crée une composition locale pour vérifier les capacités spatiales. Utilisez-la pour vérifier si l'interface utilisateur spatiale, le son spatial, les environnements, le mode passthrough ou le contenu 3D sont activés.
Vous pouvez utiliser LocalSpatialCapabilities.current pour vérifier si les capacités spatiales suivantes sont actuellement disponibles :
isSpatialUiEnabled: indique si l'application peut créer des éléments d'interface utilisateur 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 du mode passthrough.isSpatialAudioEnabled: indique si l'application peut utiliser le son spatial.
L'exemple suivant montre comment vérifier si l'interface utilisateur spatiale est activée :
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
Vérifier les capacité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, utilisez spatialCapabilities à partir de la
scene de la session pour interroger les capacités spatiales actuellement disponibles.
SPATIAL_3D_CONTENT: l'activité peut créer des contenus 3D.APP_ENVIRONMENT: l'activité peut définir son propre environnement.EMBED_ACTIVITY: l'activité peut intégrer spatialement une autre activité.PASSTHROUGH_CONTROL: l'activité peut activer ou désactiver le mode passthrough.SPATIAL_AUDIO: l'activité peut utiliser le son spatial.SPATIAL_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 capacités spatiales
ont changé.
// 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) ) { // ... }
Utiliser le mode de fusion pour vérifier les capacités d'affichage de l'appareil
Sur Android XR, les casques XR et les lunettes XR filaires ont des capacités matérielles variables, en particulier en ce qui concerne leur type d'affichage. Vous devrez peut-être adapter les couleurs de l'interface utilisateur de votre application et des objets rendus pour optimiser la visibilité, qui peut être influencée par le type d'affichage et le mode de fusion préféré utilisé par l'appareil. L'API DisplayBlendMode fournit la capacité de mode de fusion
de l'appareil pour le rendu. Utilisez cette API pour déterminer comment le contenu virtuel est ajouté au monde réel.
Voici quelques types de modes de fusion à connaître :
ADDITIVE: le contenu virtuel est ajouté au monde réel en ajoutant les valeurs de pixels pour chacun des composants rouge, vert et bleu. Le canal alpha est ignoré et les pixels noirs apparaissent transparents.ALPHA_BLEND: le contenu virtuel est ajouté au monde réel en fusionnant les valeurs de pixels en fonction du composant alpha.NO_DISPLAY: la fusion n'est pas compatible sur l'appareil.
Utilisez XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() à partir de la
bibliothèque Jetpack XR Runtime pour vérifier le type de mode de fusion utilisé
et apporter les ajustements nécessaires.
Voir aussi
- Créer une session
- Passer de HSM à FSM
- Ajouter des environnements spatiaux à votre application
- Ajouter des modèles 3D à votre application