空間機能はデバイスによって異なり、ユーザーがアプリやシステムを操作するにつれて変化します。アプリ自体によって変更されることもあります(ホームスペースやフルスペースへの移動など)。問題を回避するには、アプリで空間機能をチェックして、現在の環境でサポートされている API を特定する必要があります。
Jetpack Compose for XR を使用して空間機能をチェックする
Jetpack Compose for XR は、空間機能をチェックするためのコンポジション ローカルを作成します。これを使用して、空間 UI、空間オーディオ、環境、パススルー、3D コンテンツが有効になっているかどうかを確認します。
LocalSpatialCapabilities.current を使用して、次の空間機能が現在利用可能かどうかを確認できます。
isSpatialUiEnabled: アプリケーションが空間 UI 要素(SpatialPanelなど)を作成できるかどうかを示します。isContent3dEnabled: アプリケーションが 3D オブジェクトを作成できるかどうかを示します。isAppEnvironmentEnabled: アプリケーションが環境を設定できるかどうかを示します。isPassthroughControlEnabled: アプリケーションがパススルー状態を制御できるかどうかを示します。isSpatialAudioEnabled: アプリが空間オーディオを使用できるかどうかを示します。
次の例は、空間 UI が有効かどうかを確認する方法を示しています。
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
SceneCore を使用して空間機能をチェックする
SceneCore ライブラリを使用する場合は、セッションを作成する必要があります。セッションを作成したら、セッションの scene から spatialCapabilities を使用して、現在利用可能な空間機能をクエリします。
SPATIAL_3D_CONTENT: アクティビティで 3D コンテンツを作成できます。APP_ENVIRONMENT: アクティビティは独自に環境を設定できます。EMBED_ACTIVITY: アクティビティは別のアクティビティを空間的に埋め込むことができます。PASSTHROUGH_CONTROL: アクティビティはパススルーを有効または無効にできます。SPATIAL_AUDIO: アクティビティで空間オーディオを使用できます。SPATIAL_UI: アクティビティが空間化できる(空間パネルを追加するなど)。
また、空間機能が変更されたときに通知するコールバック addSpatialCapabilitiesChangedListener をサブスクライブすることもできます。
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
ブレンドモードを使用してデバイスのディスプレイ機能をチェックする
Android XR では、XR ヘッドセットと有線 XR グラスのハードウェア機能は、特にディスプレイ タイプに関して、さまざまなものがあります。アプリの UI とレンダリングされたオブジェクトの色を調整して、視認性を最大限に高める必要がある場合があります。視認性は、ディスプレイのタイプやデバイスで使用される優先ブレンドモードの影響を受ける可能性があります。DisplayBlendMode API は、レンダリング用のデバイスのブレンドモード機能を提供します。この API を使用して、仮想コンテンツが実世界にどのように追加されるかを判断します。
注意すべきブレンドモードの種類は次のとおりです。
ADDITIVE: 赤、緑、青の各コンポーネントのピクセル値を加算することで、仮想コンテンツが現実世界に追加されます。アルファは無視され、黒いピクセルは透明になります。ALPHA_BLEND: アルファ コンポーネントに基づいてピクセル値をアルファ ブレンドすることで、仮想コンテンツが現実世界に追加されます。NO_DISPLAY: このデバイスではブレンドがサポートされていません。
Jetpack XR ランタイム ライブラリの XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() を使用して、使用されているブレンドモードの種類を確認し、必要に応じて調整します。