หลังจากติดตั้งและกําหนดค่า Android Studio สร้างโปรเจ็กต์ และตั้งค่า Jetpack XR SDK แล้ว คุณก็พร้อมที่จะเริ่มสร้างประสบการณ์สมจริง
ก่อนเริ่มสำรวจวิธีต่างๆ ที่คุณสามารถสร้าง โปรดอ่านข้อมูลและทำงานในส่วนต่อไปนี้ให้เสร็จ เพื่อให้มั่นใจว่าแอปได้รับการกำหนดค่าสำหรับการพัฒนา Immersive 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>
พร็อพเพอร์ตี้ PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
พร็อพเพอร์ตี้ 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 จะขึ้นอยู่กับการติดตามการเผยแพร่ของแอป
หาก App Bundle มีฟีเจอร์หรือเนื้อหาที่แตกต่างกันสำหรับ 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" />
ข้อควรพิจารณาเกี่ยวกับความเข้ากันได้ของไฟล์ Manifest ของแอปสำหรับแอปบนอุปกรณ์เคลื่อนที่และแอปบนหน้าจอขนาดใหญ่
ตามที่อธิบายไว้ในส่วนฟีเจอร์ PackageManager สำหรับแอป XR แอป
ประกาศว่าใช้ฟีเจอร์โดยประกาศในองค์ประกอบ <uses-feature>
ในไฟล์ Manifest ของแอป ฟีเจอร์บางอย่าง เช่น โทรศัพท์หรือ GPS อาจไม่
รองรับอุปกรณ์บางรุ่น
หากต้องการดูรายการฟีเจอร์ที่เปิดใช้สำหรับอุปกรณ์ ให้เรียกใช้ adb
shell pm list features
ฟีเจอร์ที่ไม่รองรับ
Google Play Store จะกรองแอปพลิเคชันที่พร้อมให้ติดตั้งในอุปกรณ์โดยใช้การประกาศฟีเจอร์ Android ต่อไปนี้
ฮาร์ดแวร์ของกล้อง
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.level.full
การเชื่อมต่อ
android.hardware.ipsec_tunnel_migration
การกำหนดค่าอุปกรณ์
การกำหนดค่ารูปแบบของอุปกรณ์
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
อินพุต
android.software.input_methods
ตำแหน่ง
Near Field Communication
การกำหนดค่าการรักษาความปลอดภัยและฮาร์ดแวร์
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
การกำหนดค่าซอฟต์แวร์
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
โทรศัพท์
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
Virtual Reality (เดิม)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
วิดเจ็ต
ขั้นตอนถัดไป
ตอนนี้คุณกำหนดค่าไฟล์ Manifest ของแอปและตรวจสอบข้อมูลสำคัญเสร็จแล้ว ให้สำรวจวิธีสร้างประสบการณ์สมจริง
- นำแอป Android ไปสู่โลก 3 มิติด้วย XR
- พัฒนา UI เชิงพื้นที่ด้วย Jetpack Compose สำหรับ XR
- ใช้ Material Design สำหรับ UI เชิงพื้นที่
- เพิ่มสภาพแวดล้อมเชิงพื้นที่ลงในแอป
- สร้าง ควบคุม และจัดการเอนทิตี