เริ่มต้นสร้างประสบการณ์สมจริง

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
ชุดหูฟัง XR
แว่นตา XR แบบใช้สาย

หลังจากติดตั้งและกำหนดค่า Android Studio, สร้างโปรเจ็กต์ และตั้งค่า Jetpack XR SDK แล้ว คุณก็พร้อมที่จะเริ่มสร้างประสบการณ์ที่สมจริงสำหรับอุปกรณ์ต่างๆ เช่น ชุดหูฟัง XR และแว่นตา XR แบบมีสาย

ก่อนที่จะเริ่มสำรวจวิธีต่างๆ ในการสร้าง โปรดอ่านข้อมูลและทำงานในส่วนต่อไปนี้ให้เสร็จสมบูรณ์เพื่อให้แน่ใจว่าแอปของคุณได้รับการกำหนดค่าสำหรับการพัฒนา XR ที่สมจริง

กำหนดค่าไฟล์ Manifest ของแอป

เช่นเดียวกับโปรเจ็กต์แอป Android อื่นๆ แอป Android XR ต้องมีไฟล์ AndroidManifest.xml ที่มีการตั้งค่าไฟล์ Manifest ที่เฉพาะเจาะจง ไฟล์ Manifest อธิบายข้อมูลสำคัญเกี่ยวกับแอปของคุณให้เครื่องมือสร้าง Android, ระบบปฏิบัติการ Android และ Google Play ทราบ ดูข้อมูลเพิ่มเติมได้ที่คู่มือภาพรวมไฟล์ Manifest ของแอป

สำหรับแอปที่แตกต่างกันสำหรับ XR ไฟล์ Manifest ต้องมีองค์ประกอบและแอตทริบิวต์ต่อไปนี้

พร็อพเพอร์ตี้ PROPERTY_XR_ACTIVITY_START_MODE

พร็อพเพอร์ตี้ android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" ช่วยให้ระบบทราบว่าควรเปิดกิจกรรมในโหมดที่เฉพาะเจาะจงเมื่อเริ่มกิจกรรม

พร็อพเพอร์ตี้นี้มีค่าต่อไปนี้

  • XR_ACTIVITY_START_MODE_HOME_SPACE (Jetpack XR SDK เท่านั้น)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (Jetpack XR SDK เท่านั้น)

XR_ACTIVITY_START_MODE_HOME_SPACE

ใช้โหมดเริ่มต้นนี้เพื่อเปิดแอปใน Home Space ใน Home Space คุณสามารถเรียกใช้แอปหลายแอปพร้อมกันได้เพื่อให้ผู้ใช้ทำงานหลายอย่างพร้อมกันได้ แอป Android บนอุปกรณ์เคลื่อนที่หรือหน้าจอขนาดใหญ่สามารถทำงานใน Home Space ได้ เช่นเดียวกับแอป XR ที่สร้างขึ้นโดยใช้ 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

ใช้โหมดเริ่มต้นนี้เพื่อเปิดแอปใน Full Space ใน Full Space จะมีแอปทำงานเพียงแอปเดียวในแต่ละครั้ง โดยไม่มีขอบเขตพื้นที่ทำงาน และแอปอื่นๆ ทั้งหมดจะถูกซ่อนไว้


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

พร็อพเพอร์ตี้ android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" บ่งชี้ว่าควรเปิดแอปพลิเคชันด้วยขอบเขตประเภทที่เฉพาะเจาะจง แอปของคุณต้องระบุ XR_BOUNDARY_TYPE_LARGE หากออกแบบมาเพื่อให้ผู้ใช้เคลื่อนที่ไปรอบๆ พื้นที่จริง การระบุ XR_BOUNDARY_TYPE_NO_RECOMMENDATION จะไม่ให้คำแนะนำสำหรับประเภทขอบเขตความปลอดภัย ดังนั้นระบบจะใช้ประเภทที่ใช้อยู่แล้ว

<manifest ... >

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

ฟีเจอร์ PackageManager สำหรับแอป XR

เมื่อคุณจัดจำหน่ายแอปผ่าน Google Play Store คุณสามารถระบุฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์ที่จำเป็นในไฟล์ Manifest ของแอปได้ องค์ประกอบ uses-feature ช่วยให้ Play Store กรองแอปที่แสดงต่อผู้ใช้ได้อย่างเหมาะสม

ฟีเจอร์ต่อไปนี้มีไว้สำหรับแอปที่สร้างความแตกต่างด้วย XR โดยเฉพาะ

android.software.xr.api.spatial

แอปที่สร้างโดยใช้ Jetpack XR SDK ต้องมีฟีเจอร์นี้ในไฟล์ Manifest ของแอป ค่าที่คุณตั้งค่าสำหรับแอตทริบิวต์ android:required จะขึ้นอยู่กับแทร็กการเผยแพร่ของแอป

หากแอปของคุณรวมฟีเจอร์หรือเนื้อหาที่แตกต่างกันสำหรับ XR ไว้ใน APK บนอุปกรณ์เคลื่อนที่ที่มีอยู่และเผยแพร่ในแทร็กการเผยแพร่บนอุปกรณ์เคลื่อนที่ ให้ตั้งค่าแอตทริบิวต์ android:required เป็น 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" />

หากแอปของคุณสร้างขึ้นสำหรับอุปกรณ์ที่เปิดใช้ XR โดยเฉพาะและเผยแพร่ไปยังแทร็กการเผยแพร่สำหรับ Android XR โดยเฉพาะ ให้ตั้งค่าแอตทริบิวต์ android:required เป็น 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

ฟีเจอร์นี้ระบุว่าแอปต้องใช้อินพุตจากตัวควบคุมการเคลื่อนไหว 6DoF (ระดับความอิสระ) ที่มีความแม่นยำสูงเพื่อให้ทำงานได้อย่างถูกต้อง หากแอปของคุณรองรับตัวควบคุมและทำงานไม่ได้หากไม่มีตัวควบคุม ให้ตั้งค่าเป็น true หากแอปของคุณรองรับคอนโทรลเลอร์แต่ทำงานได้โดยไม่ต้องใช้คอนโทรลเลอร์ ให้ตั้งค่าเป็น 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

แฟล็กนี้ระบุว่าแอปต้องใช้การติดตามการเคลื่อนไหวของมือที่มีความแม่นยำสูงเพื่อให้ทำงานได้อย่างถูกต้อง ซึ่งรวมถึงตำแหน่ง การวางแนว และความเร็วของข้อต่อในมือของผู้ใช้ หากแอปรองรับการติดตามการเคลื่อนไหวของมือและทำงานไม่ได้หากไม่มีฟีเจอร์นี้ ให้ตั้งค่าเป็น true หากแอปของคุณรองรับการติดตามการเคลื่อนไหวของมือ แต่สามารถทำงานได้โดยไม่ต้องใช้ ให้ตั้งค่าเป็น 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

แฟล็กนี้ระบุว่าแอปต้องใช้การติดตามดวงตาที่มีความแม่นยำสูงสำหรับอินพุตเพื่อให้ทำงานได้อย่างถูกต้อง หากแอปของคุณรองรับการติดตามดวงตาสำหรับการป้อนข้อมูลและทำงานไม่ได้หากไม่มีการติดตามดวงตา ให้ตั้งค่าเป็น true หากแอปของคุณรองรับการติดตามดวงตาสำหรับการป้อนข้อมูล แต่สามารถทำงานได้โดยไม่ต้องใช้การติดตามดวงตา ให้ตั้งค่าเป็น 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" />

android.hardware.xr.input.face_tracking

Flag นี้ระบุว่าแอปต้องใช้ฮาร์ดแวร์การติดตามใบหน้าจึงจะทำงานได้อย่างถูกต้อง หากแอปรองรับการติดตามใบหน้าและทำงานไม่ได้หากไม่มีฟีเจอร์นี้ ให้ตั้งค่าเป็น true หากแอปของคุณรองรับการติดตามใบหน้า แต่สามารถทำงานได้โดยไม่ต้องใช้ฟีเจอร์นี้ ให้ตั้งค่าเป็น false

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

ข้อควรพิจารณาเกี่ยวกับความเข้ากันได้ของไฟล์ Manifest ของแอปสำหรับแอปบนอุปกรณ์เคลื่อนที่และแอปบนหน้าจอขนาดใหญ่

ตามที่อธิบายไว้ในส่วนฟีเจอร์ PackageManager สำหรับแอป XR แอปจะประกาศว่าใช้ฟีเจอร์โดยประกาศในองค์ประกอบ <uses-feature> ในไฟล์ Manifest ของแอป ฟีเจอร์บางอย่าง เช่น โทรศัพท์หรือ GPS อาจใช้งานร่วมกับอุปกรณ์บางรุ่นไม่ได้

หากต้องการดูรายการฟีเจอร์ที่เปิดใช้สำหรับอุปกรณ์ ให้เรียกใช้ adb shell pm list features

ฟีเจอร์ที่ไม่รองรับ

Google Play Store จะกรองแอปพลิเคชันที่พร้อมให้ติดตั้งในอุปกรณ์โดยใช้การประกาศฟีเจอร์ Android ต่อไปนี้

ฮาร์ดแวร์กล้อง

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

การเชื่อมต่อ

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

การกำหนดค่าอุปกรณ์

android.hardware.ram.low

การกำหนดค่ารูปแบบของอุปกรณ์

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

อินพุต

android.hardware.consumerir

android.software.input_methods

ตำแหน่ง

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

การกำหนดค่าการรักษาความปลอดภัยและฮาร์ดแวร์

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

เซ็นเซอร์

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

การกำหนดค่าซอฟต์แวร์

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

โทรศัพท์

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

เทคโนโลยีความจริงเสมือน (เดิม)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

วิดเจ็ต

android.software.app_widgets

ขั้นตอนถัดไป

เมื่อกำหนดค่าไฟล์ Manifest ของแอปและตรวจสอบข้อมูลสำคัญเสร็จแล้ว ให้สำรวจวิธีสร้างประสบการณ์ที่สมจริงดังนี้