Geografische Funktionen prüfen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR‑Headsets
Kabelgebundene XR‑Datenbrillen

Die räumlichen Funktionen können je nach Gerät variieren und sich ändern, wenn Nutzer mit Ihrer App oder dem System interagieren. Sie können sogar von Ihrer App selbst geändert werden, z. B. durch Wechseln in den Home- oder Full-Space. Um Probleme zu vermeiden, muss Ihre App die räumlichen Funktionen prüfen, um zu ermitteln, welche APIs in der aktuellen Umgebung unterstützt werden.

Räumliche Funktionen mit Jetpack Compose für XR prüfen

Jetpack Compose für XR erstellt eine Composition Local, um räumliche Funktionen zu prüfen. Damit können Sie prüfen, ob räumliche UI, räumliches Audio, Umgebungen, Passthrough oder 3D-Inhalte aktiviert sind.

Mit LocalSpatialCapabilities.current können Sie prüfen, ob die folgenden räumlichen Funktionen derzeit verfügbar sind:

Im folgenden Beispiel wird gezeigt, wie Sie prüfen, ob die räumliche UI aktiviert ist:

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

Räumliche Funktionen mit SceneCore prüfen

Wenn Sie die SceneCore-Bibliothek verwenden, müssen Sie eine Sitzung erstellen. Nachdem die Sitzung erstellt wurde, können Sie mit spatialCapabilities aus der scene der Sitzung abfragen, welche räumlichen Funktionen derzeit verfügbar sind.

  • SPATIAL_3D_CONTENT: Die Aktivität kann 3D-Inhalte erstellen.
  • APP_ENVIRONMENT: Die Aktivität kann ihre eigene Umgebung festlegen.
  • EMBED_ACTIVITY: Die Aktivität kann eine andere Aktivität räumlich einbetten.
  • PASSTHROUGH_CONTROL: Die Aktivität kann Passthrough aktivieren oder deaktivieren.
  • SPATIAL_AUDIO: Die Aktivität kann räumliches Audio verwenden.
  • SPATIAL_UI: Die Aktivität kann sich räumlich darstellen (z. B. durch Hinzufügen eines räumlichen Panels).

Sie können auch einen Callback abonnieren, addSpatialCapabilitiesChangedListener, der Sie benachrichtigt, wenn sich räumliche Funktionen geändert haben.

// 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)
) {
    // ...
}

Blend-Modus verwenden, um die Anzeigefunktionen des Geräts zu prüfen

Auf Android XR haben XR‑Headsets und kabelgebundene XR‑Datenbrillen unterschiedliche Hardwarefunktionen, insbesondere in Bezug auf den Anzeigetyp. Möglicherweise müssen Sie die Farben der UI Ihrer App und der gerenderten Objekte anpassen, um die Sichtbarkeit zu maximieren. Diese kann durch den Displaytyp und den bevorzugten Blend-Modus des Geräts beeinflusst werden. Die DisplayBlendMode API bietet die Blend-Modus Funktion des Geräts für das Rendering. Mit dieser API können Sie festlegen, wie virtuelle Inhalte der realen Welt hinzugefügt werden.

Einige Blend-Modi:

  • ADDITIVE: Virtuelle Inhalte werden der realen Welt hinzugefügt, indem die Pixelwerte für jede der Rot-, Grün- und Blau-Komponenten addiert werden. Alpha wird ignoriert und schwarze Pixel werden transparent dargestellt.
  • ALPHA_BLEND: Virtuelle Inhalte werden der realen Welt hinzugefügt, indem die Pixelwerte basierend auf der Alpha-Komponente per Alpha-Blending gemischt werden.
  • NO_DISPLAY: Das Mischen wird auf dem Gerät nicht unterstützt.

Mit XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() aus der Jetpack XR Runtime-Bibliothek können Sie prüfen, welcher Blend-Modus verwendet wird und bei Bedarf Anpassungen vornehmen.

Weitere Informationen