Mulai membangun pengalaman imersif

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Headset XR
Kacamata XR Berkabel

Setelah menginstal dan mengonfigurasi Android Studio, membuat project, dan menyiapkan Jetpack XR SDK, Anda siap mulai membangun pengalaman imersif.

Sebelum Anda mulai mempelajari semua cara untuk membangun, tinjau informasi dan selesaikan semua tugas di bagian berikut untuk memastikan aplikasi Anda dikonfigurasi untuk pengembangan XR imersif.

Mengonfigurasi file manifes aplikasi Anda

Seperti project aplikasi Android lainnya, aplikasi Android XR Anda harus memiliki file AndroidManifest.xml dengan setelan manifes tertentu. File manifes menjelaskan informasi penting tentang aplikasi Anda ke alat build Android, sistem operasi Android, dan Google Play. Lihat panduan ringkasan manifes aplikasi untuk mengetahui informasi selengkapnya.

Untuk aplikasi yang dibedakan XR, file manifes Anda harus berisi elemen dan atribut berikut:

Properti PROPERTY_XR_ACTIVITY_START_MODE

Properti android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" memungkinkan sistem mengetahui bahwa aktivitas harus diluncurkan dalam mode tertentu saat aktivitas dimulai.

Properti ini memiliki nilai berikut:

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

XR_ACTIVITY_START_MODE_HOME_SPACE

Gunakan mode mulai ini untuk meluncurkan aplikasi Anda di Ruang Utama. Di Ruang Utama, beberapa aplikasi dapat berjalan berdampingan, sehingga pengguna dapat melakukan multitasking. Aplikasi Android seluler atau layar besar dapat beroperasi di Ruang Utama, serta aplikasi XR yang dibuat menggunakan Jetpack XR SDK.

<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

Gunakan mode mulai ini untuk meluncurkan aplikasi Anda di Ruang Penuh. Dalam Ruang Penuh, hanya satu aplikasi yang berjalan dalam satu waktu, tanpa batas ruang, dan semua aplikasi lainnya disembunyikan.


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

Properti android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" menunjukkan bahwa aplikasi harus diluncurkan dengan jenis batas tertentu. Aplikasi Anda harus menentukan XR_BOUNDARY_TYPE_LARGE jika dirancang untuk memungkinkan pengguna bergerak di ruang fisik mereka. Menentukan XR_BOUNDARY_TYPE_NO_RECOMMENDATION tidak memberikan rekomendasi untuk jenis batas keamanan, sehingga sistem menggunakan jenis yang sudah digunakan.

<manifest ... >

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

Fitur PackageManager untuk aplikasi XR

Saat Anda mendistribusikan aplikasi melalui Google Play Store, Anda dapat menentukan fitur hardware atau software yang diperlukan dalam manifes aplikasi. Elemen uses-feature memungkinkan Play Store memfilter aplikasi yang ditampilkan kepada pengguna dengan tepat.

Fitur berikut khusus untuk aplikasi yang dibedakan XR.

android.software.xr.api.spatial

Aplikasi yang dibuat menggunakan Jetpack XR SDK harus menyertakan fitur ini dalam manifes aplikasi. Nilai yang Anda tetapkan untuk atribut android:required bergantung pada jalur rilis aplikasi Anda.

Jika app bundle Anda membedakan fitur atau konten XR ke dalam APK seluler yang ada dan dipublikasikan di jalur rilis seluler, tetapkan atribut android:required ke 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" />

Jika aplikasi Anda dibuat khusus untuk perangkat yang kompatibel dengan XR dan dipublikasikan ke jalur rilis khusus Android XR, tetapkan atribut android:required ke 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

Fitur ini menunjukkan bahwa aplikasi memerlukan input dari pengontrol gerakan 6DoF (derajat kebebasan) presisi tinggi agar berfungsi dengan benar. Jika aplikasi Anda mendukung pengontrol dan tidak dapat berfungsi tanpanya, tetapkan nilai ke true. Jika aplikasi Anda mendukung pengontrol, tetapi dapat beroperasi tanpa pengontrol, setel ke 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

Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan tangan dengan fidelitas tinggi agar berfungsi dengan benar, termasuk posisi, orientasi, dan kecepatan sambungan di tangan pengguna. Jika aplikasi Anda mendukung pelacakan tangan dan tidak dapat berfungsi tanpa pelacakan tangan, tetapkan nilai ke true. Jika aplikasi Anda mendukung pelacakan tangan, tetapi dapat beroperasi tanpa pelacakan tangan, setel ke 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

Flag ini menunjukkan bahwa aplikasi memerlukan pelacakan mata fidelitas tinggi untuk input agar berfungsi dengan benar. Jika aplikasi Anda mendukung pelacakan mata untuk input dan tidak dapat berfungsi tanpa pelacakan mata, tetapkan nilai ke true. Jika aplikasi Anda mendukung pelacakan mata untuk input, tetapi dapat beroperasi tanpa pelacakan mata, tetapkan ke 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" />

Pertimbangan kompatibilitas manifes aplikasi untuk aplikasi seluler dan perangkat layar besar

Seperti yang dijelaskan di bagian Fitur PackageManager untuk aplikasi XR, aplikasi mendeklarasikan bahwa mereka menggunakan fitur dengan mendeklarasikannya dalam elemen <uses-feature> di manifes aplikasi. Beberapa fitur, seperti telepon atau GPS, mungkin tidak kompatibel dengan semua perangkat.

Untuk mendapatkan daftar fitur yang diaktifkan untuk perangkat, jalankan adb shell pm list features.

Fitur yang tidak didukung

Google Play Store memfilter aplikasi yang tersedia untuk diinstal di perangkat menggunakan deklarasi fitur Android berikut.

Hardware Kamera

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

Konektivitas

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Konfigurasi Perangkat

android.hardware.ram.low

Konfigurasi Faktor Bentuk

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

Input

android.hardware.consumerir

android.software.input_methods

Lokasi

android.hardware.location.gps

Near Field Communication

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Konfigurasi Keamanan dan 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

Sensor

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

Konfigurasi Software

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

Telepon

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 (Lama)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widget

android.software.app_widgets

Langkah berikutnya

Setelah selesai mengonfigurasi manifes aplikasi dan meninjau informasi penting, pelajari cara membangun pengalaman imersif: