Erste Schritte beim Erstellen immersiver Erlebnisse

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR-Headsets
Kabelgebundene XR-Datenbrille

Nachdem Sie Android Studio installiert und konfiguriert, ein Projekt erstellt und das Jetpack XR SDK eingerichtet haben, können Sie immersive Funktionen für Geräte wie XR-Headsets und kabelgebundene XR-Datenbrillen entwickeln.

Bevor Sie sich mit den verschiedenen Möglichkeiten zur Entwicklung von Apps beschäftigen, sollten Sie die Informationen in den folgenden Abschnitten lesen und die entsprechenden Aufgaben ausführen, um sicherzustellen, dass Ihre App für die Entwicklung immersiver XR-Inhalte konfiguriert ist.

Manifestdatei der App konfigurieren

Wie bei anderen Android-App-Projekten muss Ihre Android XR-App eine AndroidManifest.xml-Datei mit bestimmten Manifesteinstellungen enthalten. Die Manifestdatei enthält wichtige Informationen zu deiner App für die Android-Build-Tools, das Android-Betriebssystem und Google Play. Weitere Informationen finden Sie im Leitfaden zum App-Manifest.

Bei XR-differenzierten Apps muss die Manifestdatei die folgenden Elemente und Attribute enthalten:

PROPERTY_XR_ACTIVITY_START_MODE-Attribut

Mit dem Attribut android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" wird dem System mitgeteilt, dass eine Aktivität beim Start in einem bestimmten Modus gestartet werden soll.

Diese Property hat die folgenden Werte:

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

XR_ACTIVITY_START_MODE_HOME_SPACE

Verwenden Sie diesen Startmodus, um Ihre App im Home Space zu starten. Im Home Space können mehrere Apps nebeneinander ausgeführt werden, sodass Nutzer Multitasking betreiben können. Alle Android-Apps für Mobilgeräte oder große Bildschirme können im Home Space ausgeführt werden, ebenso wie XR-Apps, die mit dem Jetpack XR SDK erstellt wurden.

<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

Verwenden Sie diesen Startmodus, um Ihre App im Full Space zu starten. Im Full Space wird jeweils nur eine App ohne räumliche Begrenzungen ausgeführt und alle anderen Apps werden ausgeblendet.


<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>

Das Attribut android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" gibt an, dass die Anwendung mit einem bestimmten Begrenzungstyp gestartet werden soll. In Ihrer App muss XR_BOUNDARY_TYPE_LARGE angegeben werden, wenn sie so konzipiert ist, dass sich Nutzer in ihrer physischen Umgebung bewegen können. Wenn Sie XR_BOUNDARY_TYPE_NO_RECOMMENDATION angeben, werden keine Empfehlungen für den Typ der Sicherheitsgrenze bereitgestellt. Das System verwendet dann den bereits verwendeten Typ.

<manifest ... >

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

PackageManager-Funktionen für XR-Apps

Wenn Sie Apps über den Google Play Store vertreiben, können Sie im App-Manifest erforderliche Hardware- oder Softwarefunktionen angeben. Mit dem Element uses-feature kann der Google Play Store die den Nutzern angezeigten Apps entsprechend filtern.

Die folgenden Funktionen sind spezifisch für XR-differenzierte Apps.

android.software.xr.api.spatial

Apps, die mit dem Jetpack XR SDK erstellt wurden, müssen diese Funktion im App-Manifest enthalten. Der Wert, den Sie für das Attribut android:required festlegen, hängt vom Release-Track Ihrer App ab.

Wenn Ihre App XR-spezifische Funktionen oder Inhalte in ein vorhandenes mobiles APK einbindet und im mobilen Release-Track veröffentlicht wird, setzen Sie das Attribut android:required auf 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" />

Wenn Ihre App speziell für XR-fähige Geräte entwickelt wurde und im speziellen Release-Track für Android XR veröffentlicht wird, setzen Sie das Attribut android:required auf 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

Diese Funktion gibt an, dass die App Eingaben von einem hochpräzisen Motion-Controller mit 6 DoF (Degrees of Freedom, Freiheitsgrade) benötigt, um richtig zu funktionieren. Wenn deine App Controller unterstützt und ohne sie nicht funktioniert, setze den Wert auf true. Wenn deine App Controller unterstützt, aber auch ohne sie funktioniert, setze den Wert auf 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

Dieses Flag gibt an, dass die App ein hochpräzises Handtracking benötigt, um richtig zu funktionieren, einschließlich Position, Ausrichtung und Geschwindigkeit der Gelenke in der Hand des Nutzers. Wenn Ihre App Handtracking unterstützt und ohne diese Funktion nicht funktioniert, legen Sie den Wert auf true fest. Wenn deine App Handtracking unterstützt, aber auch ohne funktioniert, lege false fest.

<!-- 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

Dieses Flag gibt an, dass die App für die Eingabe ein hochpräzises Eye-Tracking benötigt, um richtig zu funktionieren. Wenn deine App Eye-Tracking für Eingaben unterstützt und ohne diese Funktion nicht funktioniert, setze den Wert auf true. Wenn Ihre App Eye-Tracking für die Eingabe unterstützt, aber auch ohne funktioniert, legen Sie den Wert auf false fest.

<!-- 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" />

android.hardware.xr.input.face_tracking

Dieses Flag gibt an, dass die App Hardware für die Mimik-Erkennung benötigt, um richtig zu funktionieren. Wenn Ihre App die Mimik-Erkennung unterstützt und ohne sie nicht funktioniert, setzen Sie den Wert auf true. Wenn Ihre App die Mimik-Erkennung unterstützt, aber auch ohne sie funktioniert, legen Sie false fest.

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

Überlegungen zur Kompatibilität von App-Manifesten für Apps für Mobilgeräte und große Bildschirme

Wie im Abschnitt PackageManager-Funktionen für XR-Apps beschrieben, deklarieren Apps, dass sie eine Funktion verwenden, indem sie sie in einem <uses-feature>-Element im App-Manifest deklarieren. Einige Funktionen wie Telefonie oder GPS sind möglicherweise nicht mit allen Geräten kompatibel.

Führen Sie adb shell pm list features aus, um eine Liste der für ein Gerät aktivierten Funktionen abzurufen.

Nicht unterstützte Funktionen

Der Google Play Store filtert Apps, die auf einem Gerät installiert werden können, anhand der folgenden Android-Funktionsdeklarationen.

Kamerahardware

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

Verbindung

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Gerätekonfiguration

android.hardware.ram.low

Formfaktorkonfiguration

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

Eingabe

android.hardware.consumerir

android.software.input_methods

Standort

android.hardware.location.gps

Nahfeldkommunikation

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Sicherheitskonfiguration und Hardware

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

Sensoren

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

Softwarekonfiguration

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

Telefonie

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

Virtual Reality (Legacy)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Nächste Schritte

Nachdem du das Manifest deiner App konfiguriert und wichtige Informationen gelesen hast, kannst du dich mit den Möglichkeiten vertraut machen, wie du immersive Erlebnisse schaffen kannst: