開始使用支援的 OpenXR 擴充功能或引擎建構應用程式前,請詳閱下列各節的資訊清單設定和權限規定,確認應用程式已針對 XR 開發作業完成設定。
設定應用程式的資訊清單檔案
與其他 Android 應用程式專案一樣,Android XR 應用程式必須有 AndroidManifest.xml 檔案,並包含特定資訊清單設定。資訊清單檔案會將應用程式的基本資訊,提供給 Android 建構工具、Android 作業系統和 Google Play。詳情請參閱應用程式資訊清單總覽指南。
如果是 XR 差異化應用程式,資訊清單檔案必須包含下列元素和屬性:
PROPERTY_XR_ACTIVITY_START_MODE 屬性
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" 屬性可讓系統知道,活動啟動時應以特定模式啟動。
這項屬性具有下列值:
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(僅限 OpenXR)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
使用 OpenXR 建構的應用程式會在全螢幕模式下啟動,且必須使用 XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED 啟動模式。非代管全螢幕會向 Android XR 發出信號,表示應用程式使用 OpenXR。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
</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>
空間容器屬性
如果應用程式使用 XR_EXT_spatial_container 擴充功能 (Spatial API 級別 4 推出),除了全沉浸式檢視畫面外,還會在有邊界的 3D 體積或 2D 面板中顯示內容,您可以在 <activity> 或 <application> 層級宣告下列資訊清單屬性,向執行階段提供啟動提示:
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES:指定活動使用的邊界模式,以|分隔。有效值如下:
"2d_panel""bounded""immersive"
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE:指定活動啟動時的初始邊界模式。有效值如下:
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDEDXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVEXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED
<manifest ... >
<application ... >
<activity
android:name="com.example.myapp.MainActivity" ... >
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="bounded|immersive" />
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED" />
</activity>
</application>
</manifest>
<uses-native-library> OpenXR
OpenXR 應用程式必須宣告使用原生 OpenXR 程式庫,才能成功載入執行階段。如果沒有這項宣告,執行階段就無法載入。
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
<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 應用程式的 PackageManager 功能
透過 Google Play 商店發行應用程式時,您可以在應用程式資訊清單中指定必要的硬體或軟體功能。uses-feature 元素可讓 Play 商店適當篩選向使用者顯示的應用程式。
下列功能僅適用於 XR 差異化應用程式。
android.software.xr.api.openxr
如果應用程式指定 Android XR 平台,且是以 OpenXR 或 Unity 建構,則必須在應用程式資訊清單中加入這項功能,並將 android:required 屬性設為 true。
如果應用程式使用 Android XR Extensions Package for Unity 1.0.0 以上版本,或 Unity OpenXR: Android XR Package 0.5.0-exp.1 以上版本,就不必手動將這個元素新增至應用程式資訊清單。這兩個套件會為您將這個元素插入應用程式資訊清單。
裝置可以指定這項功能的版本,代表裝置支援的 OpenXR 最高版本。較高的 16 位元代表主要編號,較低的 16 位元代表次要編號。舉例來說,如要指定 OpenXR 1.1 版,請將值設為 "0x00010001"。
應用程式可以使用功能版本,指出應用程式所需的 OpenXR 最低版本。舉例來說,如果應用程式需要 OpenXR 1.1 版支援,請宣告下列功能:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.software.xr.api.spatial
如果 OpenXR 應用程式需要特定 Android XR Spatial API 版本中導入的擴充功能,可以宣告 android.software.xr.api.spatial 功能,並將 android:version 設為所需的最低 Spatial API 級別 (例如 "1"、"2"、"3" 或 "4")。請參閱「使用支援的 OpenXR 擴充功能建構」,查看各項擴充功能所需的 Spatial API 版本。
<!-- Indicates that the app requires Android XR Spatial API Level 4 or higher. -->
<uses-feature android:name="android.software.xr.api.spatial"
android:version="4"
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
這個旗標表示應用程式需要臉部追蹤硬體才能正常運作。如果應用程式支援臉部追蹤功能,且沒有這項功能就無法運作,請將值設為 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" />
android.hardware.location.gps
這個旗標表示應用程式會使用裝置上的精確 GPS 位置,例如使用地理空間 OpenXR 擴充功能 (XR_ANDROID_geospatial 和 XR_ANDROID_geospatial_anchor)。如果應用程式必須有 GPS 硬體才能運作,請將 android:required 設為 true,否則請設為 false。
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
瞭解 OpenXR 權限
許多 OpenXR 擴充功能會存取隱私權敏感的感應器資料和功能。如要使用這些擴充功能,應用程式必須在 AndroidManifest.xml 檔案中宣告必要的 <uses-permission> 元素,並在執行階段要求危險權限,才能呼叫對應的 OpenXR 函式。
<manifest ... >
<!-- Example dangerous permissions required by specific OpenXR extensions -->
<uses-permission android:name="android.permission.SCENE_UNDERSTANDING_COARSE" />
<uses-permission android:name="android.permission.HAND_TRACKING" />
...
</manifest>
下表列出 Android XR 支援的 OpenXR 擴充功能所需的危險 Android 權限。如要進一步瞭解所有 SDK 的 XR 權限,請參閱「瞭解 XR 權限」。
後續步驟
完成應用程式資訊清單設定並詳閱重要資訊後,請探索如何使用 OpenXR 建構: