Commencer à créer des expériences immersives

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

Après avoir installé et configuré Android Studio, créé un projet et configuré le SDK Jetpack XR, vous êtes prêt à créer des expériences immersives.

Avant de découvrir toutes les façons de créer, consultez les informations et effectuez les tâches des sections suivantes pour vous assurer que votre application est configurée pour le développement XR immersif.

Configurer le fichier manifeste de votre application

Comme pour les autres projets d'applications Android, votre application Android XR doit disposer d'un fichier AndroidManifest.xml avec des paramètres de fichier manifeste spécifiques. Le fichier manifeste fournit aux outils de compilation Android, au système d'exploitation Android et à Google Play des informations essentielles sur votre application. Pour en savoir plus, consultez le guide de présentation du fichier manifeste d'application.

Pour les applications différenciées XR, votre fichier manifeste doit contenir les éléments et attributs suivants :

Propriété PROPERTY_XR_ACTIVITY_START_MODE

La propriété android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" indique au système qu'une activité doit être lancée dans un mode spécifique lorsqu'elle démarre.

Cette propriété accepte les valeurs suivantes :

  • XR_ACTIVITY_START_MODE_HOME_SPACE (SDK Jetpack XR uniquement)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (SDK Jetpack XR uniquement)

XR_ACTIVITY_START_MODE_HOME_SPACE

Utilisez ce mode de démarrage pour lancer votre application dans l'espace d'accueil. Dans l'espace Maison, plusieurs applications peuvent s'exécuter côte à côte, ce qui permet aux utilisateurs d'effectuer plusieurs tâches à la fois. Toute application Android mobile ou pour grand écran peut fonctionner dans l'espace d'accueil, ainsi que les applications XR conçues à l'aide du SDK Jetpack XR.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED

Utilisez ce mode de démarrage pour lancer votre application en mode Full Space. En mode Plein écran, une seule application s'exécute à la fois, sans limites spatiales, et toutes les autres applications sont masquées.


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

La propriété android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indique que l'application doit être lancée avec un type de limite spécifique. Votre application doit spécifier XR_BOUNDARY_TYPE_LARGE si elle est conçue pour permettre aux utilisateurs de se déplacer dans leur espace physique. Si vous spécifiez XR_BOUNDARY_TYPE_NO_RECOMMENDATION, aucune recommandation n'est fournie pour le type de limite de sécurité. Le système utilise donc le type déjà en place.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

Fonctionnalités de PackageManager pour les applications XR

Lorsque vous distribuez des applications sur le Google Play Store, vous pouvez spécifier les fonctionnalités matérielles ou logicielles requises dans le fichier manifeste de l'application. L'élément uses-feature permet au Play Store de filtrer correctement les applications affichées aux utilisateurs.

Les fonctionnalités suivantes sont spécifiques aux applications différenciées XR.

android.software.xr.api.spatial

Les applications créées à l'aide du SDK Jetpack XR doivent inclure cette fonctionnalité dans le fichier manifeste de l'application. La valeur que vous définissez pour l'attribut android:required dépend de la piste de publication de votre application.

Si votre application regroupe des fonctionnalités ou du contenu XR différenciés dans un APK mobile existant et qu'elle est publiée sur le canal de publication mobile, définissez l'attribut android:required sur false :

<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />

Si votre application est conçue spécifiquement pour les appareils compatibles avec la réalité XR et qu'elle est publiée sur le canal de publication dédié Android XR, définissez l'attribut android:required sur true :

<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />

android.hardware.xr.input.controller

Cette fonctionnalité indique que l'application nécessite une entrée d'un contrôleur de mouvement 6 DoF (degrés de liberté) de haute précision pour fonctionner correctement. Si votre application est compatible avec les manettes et ne peut pas fonctionner sans elles, définissez la valeur sur true. Si votre application est compatible avec les manettes, mais peut fonctionner sans, définissez-la sur false.

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

Cet indicateur indique que l'application nécessite un suivi des mains haute fidélité pour fonctionner correctement, y compris la position, l'orientation et la vitesse des articulations de la main de l'utilisateur. Si votre application est compatible avec le suivi des mains et ne peut pas fonctionner sans, définissez la valeur sur true. Si votre application est compatible avec le suivi des mains, mais peut fonctionner sans, définissez-le sur false.

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

Ce flag indique que l'application nécessite un suivi oculaire haute fidélité pour que la saisie fonctionne correctement. Si votre application est compatible avec le suivi du regard pour la saisie et ne peut pas fonctionner sans, définissez la valeur sur true. Si votre application est compatible avec le suivi du regard pour la saisie, mais peut fonctionner sans, définissez-le sur false.

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

Éléments à prendre en compte concernant la compatibilité du fichier manifeste de l'application pour les applications mobiles et pour grand écran

Comme décrit dans la section Fonctionnalités de PackageManager pour les applications XR, les applications déclarent qu'elles utilisent une fonctionnalité en la déclarant dans un élément <uses-feature> du fichier manifeste de l'application. Il est possible que certaines fonctionnalités, comme la téléphonie ou le GPS, ne soient pas compatibles avec tous les appareils.

Pour obtenir la liste des fonctionnalités activées pour un appareil, exécutez la commande adb shell pm list features.

Fonctionnalités non compatibles

Le Google Play Store filtre les applications disponibles pour l'installation sur un appareil à l'aide des déclarations de fonctionnalités Android suivantes.

Module photo

android.hardware.camera.ar

android.hardware.camera.autofocus

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

android.hardware.camera.concurrent

android.hardware.camera.external

android.hardware.camera.flash

android.hardware.camera.level.full

Connectivité

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuration de l'appareil

android.hardware.ram.low

Configuration du facteur de forme

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Entrée

android.hardware.consumerir

android.software.input_methods

Position

android.hardware.location.gps

Technologie NFC (communication en champ proche)

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuration de la sécurité et matériel

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

android.hardware.identity_credential

android.hardware.identity_credential_direct_access

android.hardware.keystore.limited_use_key

android.hardware.keystore.single_use_key

android.hardware.strongbox_keystore

Capteurs

android.hardware.sensor.accelerometer_limited_axes

android.hardware.sensor.accelerometer_limited_axes_uncalibrated

android.hardware.sensor.ambient_temperature

android.hardware.sensor.barometer

android.hardware.sensor.gyroscope_limited_axes

android.hardware.sensor.gyroscope_limited_axes_uncalibrated

android.hardware.sensor.heading

android.hardware.sensor.heartrate

android.hardware.sensor.heartrate.ecg

android.hardware.sensor.hinge_angle

android.hardware.sensor.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Configuration logicielle

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Téléphonie

android.hardware.telephony

android.hardware.telephony.calling

android.hardware.telephony.cdma

android.hardware.telephony.data

android.hardware.telephony.euicc

android.hardware.telephony.euicc.mep

android.hardware.telephony.gsm

android.hardware.telephony.ims

android.hardware.telephony.mbms

android.hardware.telephony.messaging

android.hardware.telephony.radio.access

android.hardware.telephony.subscription

android.software.sip

android.software.sip.voip

Réalité virtuelle (ancienne)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Étapes suivantes

Maintenant que vous avez terminé de configurer le fichier manifeste de votre application et d'examiner les informations importantes, découvrez comment créer des expériences immersives :