בדיקת היכולות המרחביות

יכולות המרחב המשותף יכולות להשתנות כאשר המשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת, או אפילו על ידי האפליקציה עצמה – לדוגמה, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית.

בדיקת היכולות המרחביות באמצעות Jetpack Compose ל-XR

Jetpack Compose for XR יוצר Composition Local כדי לבדוק את היכולות המרחביות. אפשר להשתמש באפשרות הזו כדי לבדוק אם ממשק המשתמש המרחבי, האודיו המרחבי, הסביבות, העברת האות או התוכן התלת-ממדי מופעלים.

אפשר להשתמש ב-LocalSpatialCapabilities.current כדי לבדוק אם היכולות המרחביות הבאות זמינות כרגע:

  • isSpatialUiEnabled: מציין אם האפליקציה יכולה ליצור רכיבים מרחביים של ממשק המשתמש (לדוגמה, SpatialPanel).
  • isContent3dEnabled: מציין אם האפליקציה יכולה ליצור אובייקטים תלת-ממדיים.
  • isAppEnvironmentEnabled: מציין אם האפליקציה יכולה להגדיר את הסביבה.
  • isPassthroughControlEnabled: מציין אם האפליקציה יכולה לשלוט במצב העברה.
  • isSpatialAudioEnabled: מציין אם האפליקציה יכולה להשתמש באודיו מרחבי.

בדוגמה הבאה מוסבר איך לבדוק אם ממשק המשתמש המרחבי מופעל:

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

בדיקת היכולות המרחביות באמצעות SceneCore

כשמשתמשים בספריית SceneCore, צריך ליצור סשן. אחרי שיוצרים את הסשן, קוראים ל-spatialCapabilities בסשן כדי לבדוק אילו יכולות מרחבייות זמינות כרגע.

אפשר גם להירשם לקבלת שיחה חוזרת, addSpatialCapabilitiesChangedListener שתודיע לכם כשהיכולות המרחביות ישתנו.

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

למידע נוסף