หลังจากติดตั้งและกำหนดค่า 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>
พร็อพเพอร์ตี้ 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 จะขึ้นอยู่กับแทร็กการเผยแพร่ของแอป
หากแอปของคุณรวมฟีเจอร์หรือเนื้อหาที่แตกต่างกันสำหรับ 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.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
เทคโนโลยีความจริงเสมือน (เดิม)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
วิดเจ็ต
ขั้นตอนถัดไป
เมื่อกำหนดค่าไฟล์ Manifest ของแอปและตรวจสอบข้อมูลสำคัญเสร็จแล้ว ให้สำรวจวิธีสร้างประสบการณ์ที่สมจริงดังนี้
- เปลี่ยนแอป Android ให้เป็น 3 มิติด้วย XR
- พัฒนา UI เชิงพื้นที่ด้วย Jetpack Compose สำหรับ XR
- ใช้ Material Design สำหรับ UI เชิงพื้นที่
- เพิ่มสภาพแวดล้อมเชิงพื้นที่ลงในแอป
- สร้าง ควบคุม และจัดการเอนทิตี