יכולות המרחב המשותף יכולות להשתנות כאשר המשתמשים יוצרים אינטראקציה עם האפליקציה או עם המערכת, או אפילו על ידי האפליקציה עצמה – לדוגמה, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי 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
בסשן כדי לבדוק אילו יכולות מרחבייות זמינות כרגע.
SPATIAL_CAPABILITY_3D_CONTENT
: הפעילות יכולה ליצור תוכן תלת-ממדי.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: הפעילות יכולה להגדיר סביבה משלה.SPATIAL_CAPABILITY_EMBED_ACTIVITY
: הפעילות יכולה להטמיע פעילות אחרת מבחינה מרחבית.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: הפעילות יכולה להפעיל או להשבית את העברת הנתונים.SPATIAL_CAPABILITY_SPATIAL_AUDIO
: אפשר להשתמש באודיו מרחבי בפעילות.SPATIAL_CAPABILITY_UI
: הפעילות יכולה להפוך למרחבית, למשל על ידי הוספת חלונית מרחבית.
אפשר גם להירשם לקבלת שיחה חוזרת, 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 ) ) { // ... }