Kiểm tra các chức năng không gian

Các tính năng không gian có thể thay đổi khi người dùng tương tác với ứng dụng hoặc hệ thống, hoặc thậm chí có thể do chính ứng dụng của bạn thay đổi, ví dụ: chuyển sang Không gian chính hoặc Không gian toàn cảnh. Để tránh các vấn đề, ứng dụng của bạn cần kiểm tra các tính năng không gian để xác định API nào được hỗ trợ trong môi trường hiện tại.

Kiểm tra các tính năng không gian bằng Jetpack Compose cho XR

Jetpack Compose cho XR tạo một Thành phần cục bộ để kiểm tra các tính năng không gian. Sử dụng tính năng này để kiểm tra xem giao diện người dùng không gian, âm thanh không gian, môi trường, tính năng truyền tải hoặc nội dung 3D có được bật hay không.

Bạn có thể sử dụng LocalSpatialCapabilities.current để kiểm tra xem các tính năng không gian sau đây có hiện có hay không:

  • isSpatialUiEnabled: Cho biết liệu ứng dụng có thể tạo các thành phần giao diện người dùng không gian hay không (ví dụ: SpatialPanel).
  • isContent3dEnabled: Cho biết liệu ứng dụng có thể tạo đối tượng 3D hay không.
  • isAppEnvironmentEnabled: Cho biết liệu ứng dụng có thể thiết lập môi trường hay không.
  • isPassthroughControlEnabled: Cho biết liệu ứng dụng có thể kiểm soát trạng thái truyền qua hay không.
  • isSpatialAudioEnabled: Cho biết liệu ứng dụng có thể sử dụng âm thanh không gian hay không.

Ví dụ sau đây cho biết cách kiểm tra xem giao diện người dùng không gian có được bật hay không:

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

Kiểm tra các chức năng không gian bằng SceneCore

Khi sử dụng thư viện SceneCore, bạn sẽ phải tạo một phiên. Sau khi tạo phiên, hãy gọi spatialCapabilities trên phiên để truy vấn xem tính năng không gian nào hiện có.

Bạn cũng có thể chọn đăng ký một lệnh gọi lại, addSpatialCapabilitiesChangedListener sẽ thông báo cho bạn khi các tính năng không gian thay đổi.

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
    )
) {
    xrSession.scene.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
            SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT
    )
) {
    // ...
}

Xem thêm