Trước khi bắt đầu xây dựng bằng các tiện ích OpenXR được hỗ trợ hoặc bằng một công cụ được hỗ trợ, hãy xem lại cấu hình tệp kê khai và các yêu cầu về quyền trong các phần sau để đảm bảo ứng dụng của bạn được định cấu hình cho quá trình phát triển XR.
Định cấu hình tệp kê khai của ứng dụng
Giống như các dự án ứng dụng Android khác, ứng dụng Android XR của bạn phải có một tệp AndroidManifest.xml với các chế độ cài đặt tệp kê khai cụ thể. Tệp kê khai mô tả thông tin thiết yếu về ứng dụng của bạn cho các công cụ xây dựng của Android, hệ điều hành Android và Google Play. Hãy xem hướng dẫn tổng quan về tệp kê khai ứng dụng để biết thêm thông tin.
Đối với ứng dụng khác biệt cho XR, tệp kê khai của bạn phải chứa các phần tử và thuộc tính sau:
Thuộc tính PROPERTY_XR_ACTIVITY_START_MODE
Thuộc tính android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" cho hệ thống biết rằng một hoạt động cần được khởi chạy ở một chế độ cụ thể khi hoạt động đó bắt đầu.
Thuộc tính này có các giá trị sau:
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(Chỉ OpenXR)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
Các ứng dụng được tạo bằng OpenXR sẽ chạy ở chế độ Toàn bộ không gian và phải sử dụng chế độ khởi động XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Toàn bộ không gian không được quản lý báo hiệu cho Android XR rằng ứng dụng sử dụng 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>
Thuộc tính PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
Thuộc tính android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" cho biết rằng ứng dụng phải được chạy với một loại ranh giới cụ thể. Ứng dụng của bạn cần chỉ định
XR_BOUNDARY_TYPE_LARGE nếu được thiết kế để cho phép
người dùng di chuyển trong không gian thực tế. Việc chỉ định XR_BOUNDARY_TYPE_NO_RECOMMENDATION không đưa ra đề xuất nào cho loại ranh giới an toàn, vì vậy, hệ thống sẽ sử dụng loại ranh giới đang được dùng.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
Thuộc tính vùng chứa không gian
Nếu ứng dụng của bạn sử dụng tiện ích XR_EXT_spatial_container (được giới thiệu trong Spatial API cấp 4) để trình bày nội dung trong các khối 3D có giới hạn hoặc bảng điều khiển 2D ngoài chế độ xem sống động toàn diện, thì bạn có thể khai báo các thuộc tính tệp kê khai sau đây ở cấp <activity> hoặc <application> để cung cấp gợi ý khởi chạy cho thời gian chạy:
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES: Chỉ định các chế độ ranh giới mà hoạt động sử dụng, được phân tách bằng|.Các giá trị hợp lệ là:
"2d_panel""bounded""immersive"
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE: Chỉ định chế độ ranh giới ban đầu của hoạt động khi khởi chạy.Các giá trị hợp lệ là:
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
Ứng dụng OpenXR phải khai báo việc sử dụng thư viện OpenXR gốc để tải thành công thời gian chạy. Nếu không có khai báo này, thời gian chạy sẽ không tải được.
<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>
Các tính năng của PackageManager cho ứng dụng XR
Khi
phân phối ứng dụng thông qua Cửa hàng Google Play,
bạn có thể chỉ định các tính năng phần cứng hoặc phần mềm bắt buộc trong tệp kê khai ứng dụng. Phần tử uses-feature cho phép Cửa hàng Play lọc ứng dụng hiển thị cho người dùng một cách phù hợp.
Các tính năng sau đây dành riêng cho ứng dụng khác biệt về XR.
android.software.xr.api.openxr
Các ứng dụng nhắm đến nền tảng Android XR và được xây dựng bằng OpenXR hoặc Unity phải
đưa tính năng này vào tệp kê khai ứng dụng, trong đó thuộc tính android:required
được đặt thành true.
Những ứng dụng sử dụng Android XR Extensions Package for Unity phiên bản 1.0.0 trở lên hoặc Unity OpenXR: Android XR Package phiên bản 0.5.0-exp.1 trở lên không cần phải thêm phần tử này vào tệp kê khai ứng dụng theo cách thủ công. Hai gói này sẽ chèn phần tử này vào tệp kê khai ứng dụng cho bạn.
Thiết bị có thể chỉ định một phiên bản cho tính năng này, cho biết phiên bản OpenXR cao nhất mà thiết bị hỗ trợ. Số 16 bit lớn hơn đại diện cho số chính và số 16 bit nhỏ hơn đại diện cho số phụ. Ví dụ: để chỉ định OpenXR phiên bản 1.1, giá trị sẽ được đặt thành "0x00010001".
Ứng dụng có thể sử dụng phiên bản tính năng để cho biết phiên bản OpenXR tối thiểu mà ứng dụng yêu cầu. Ví dụ: nếu ứng dụng của bạn yêu cầu hỗ trợ OpenXR phiên bản 1.1, hãy khai báo tính năng sau:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.software.xr.api.spatial
Các ứng dụng OpenXR yêu cầu tiện ích được giới thiệu trong một phiên bản Spatial API cụ thể của Android XR có thể khai báo tính năng android.software.xr.api.spatial với android:version được đặt thành cấp độ Spatial API tối thiểu bắt buộc (chẳng hạn như "1", "2", "3" hoặc "4"). Hãy xem phần Xây dựng bằng các tiện ích OpenXR được hỗ trợ để kiểm tra phiên bản Spatial API bắt buộc cho từng tiện ích.
<!-- 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
Tính năng này cho biết ứng dụng cần có dữ liệu đầu vào từ bộ điều khiển chuyển động 6DoF (bậc tự do) có độ chính xác cao để hoạt động đúng cách. Nếu ứng dụng của bạn hỗ trợ tay điều khiển và không thể hoạt động nếu không có tay điều khiển, hãy đặt giá trị thành true.
Nếu ứng dụng của bạn hỗ trợ bộ điều khiển nhưng có thể hoạt động mà không cần bộ điều khiển, hãy đặt thành 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
Cờ này cho biết ứng dụng cần có tính năng theo dõi cử động của tay có độ chính xác cao để hoạt động đúng cách, bao gồm cả vị trí, hướng và vận tốc của các khớp trong tay người dùng. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi cử động của tay và không thể hoạt động nếu không có tính năng này, hãy đặt giá trị thành true. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi cử động của tay nhưng có thể hoạt động mà không cần tính năng này, hãy đặt thành 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
Cờ này cho biết ứng dụng cần có tính năng theo dõi ánh mắt có độ chính xác cao để hoạt động đúng cách. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi ánh mắt để nhập dữ liệu và không thể hoạt động nếu không có tính năng này, hãy đặt giá trị thành true. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi ánh mắt
để nhập dữ liệu nhưng có thể hoạt động mà không cần tính năng này, hãy đặt thành 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
Cờ này cho biết ứng dụng cần có phần cứng theo dõi khuôn mặt để hoạt động đúng cách. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi khuôn mặt và không thể hoạt động nếu không có tính năng này, hãy đặt giá trị thành true. Nếu ứng dụng của bạn hỗ trợ tính năng theo dõi khuôn mặt nhưng có thể hoạt động mà không cần tính năng này, hãy đặt giá trị thành 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
Cờ này cho biết ứng dụng sử dụng thông tin vị trí chính xác qua GPS trên thiết bị, chẳng hạn như khi sử dụng các tiện ích OpenXR không gian địa lý (XR_ANDROID_geospatial và XR_ANDROID_geospatial_anchor). Đặt android:required thành true nếu ứng dụng của bạn không thể hoạt động khi không có phần cứng GPS hoặc false nếu ứng dụng có thể hoạt động khi không có phần cứng GPS.
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
Tìm hiểu về các quyền đối với OpenXR
Nhiều tiện ích mở rộng OpenXR truy cập vào dữ liệu cảm biến và khả năng nhạy cảm về quyền riêng tư. Để sử dụng các tiện ích này, ứng dụng của bạn phải khai báo các phần tử <uses-permission> bắt buộc trong tệp AndroidManifest.xml và yêu cầu các quyền nguy hiểm trong thời gian chạy trước khi gọi các hàm OpenXR tương ứng.
<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>
Bảng sau đây tóm tắt các quyền nguy hiểm của Android mà các tiện ích OpenXR được hỗ trợ trên Android XR yêu cầu. Để biết thông tin chi tiết đầy đủ về quyền XR trên tất cả SDK, hãy xem phần Tìm hiểu về quyền đối với XR.
Quyền |
Tính năng |
Tiện ích OpenXR |
|---|---|---|
Tư thế, trạng thái và hướng mắt có độ chính xác thấp (chẳng hạn như đối với hình đại diện). |
|
|
Ánh mắt có độ chính xác cao để lựa chọn, nhập, tương tác và kết xuất foveated theo dõi ánh mắt. |
|
|
Theo dõi hình dạng kết hợp khuôn mặt và kết xuất biểu cảm khuôn mặt. |
||
Đầu vào âm thanh cho các nguồn dữ liệu theo dõi khuôn mặt dựa trên âm thanh. |
||
Theo dõi tư thế khớp tay, vận tốc, trạng thái nhắm và biểu diễn lưới tay. |
||
Theo dõi tư thế khớp cơ thể và tỷ lệ khung xương. |
||
Theo dõi mặt phẳng, theo dõi đối tượng, theo dõi hình ảnh/điểm đánh dấu/mã QR, neo, tính bền vững, truyền tia đối với các đối tượng có thể theo dõi, ước tính ánh sáng và lưới truyền qua. |
|
|
Kết cấu chiều sâu, lưới cảnh, ước tính ánh sáng bản đồ khối, dò tia chiều sâu và chú thích không gian. |
||
Vị trí và hướng chính xác so với Trái Đất để theo dõi và neo Không gian địa lý. |
Các bước tiếp theo
Giờ đây, khi đã hoàn tất việc định cấu hình tệp kê khai của ứng dụng và xem xét thông tin quan trọng, hãy khám phá các cách bạn có thể xây dựng bằng OpenXR: