היכולות המרחביות יכולות להשתנות בין מכשירים, וגם כשהמשתמשים מבצעים פעולות באפליקציה או במערכת. הם יכולים להשתנות גם על ידי האפליקציה עצמה – למשל, מעבר למרחב הבית או למרחב המלא. כדי למנוע בעיות, האפליקציה צריכה לבדוק את היכולות המרחביות כדי לקבוע אילו ממשקי API נתמכים בסביבה הנוכחית.
בדיקת היכולות המרחביות באמצעות Jetpack Compose for XR
Jetpack Compose for XR יוצר Composition Local כדי לבדוק את היכולות המרחביות. אפשר להשתמש בזה כדי לבדוק אם ממשק משתמש מרחבי, אודיו מרחבי, סביבות, מעבר או תוכן תלת-ממדי מופעלים.
אפשר להשתמש ב-LocalSpatialCapabilities.current כדי לבדוק אם היכולות המרחביות הבאות זמינות כרגע:
-
isSpatialUiEnabled: מציין אם האפליקציה יכולה ליצור רכיבים מרחביים בממשק המשתמש (לדוגמה,SpatialPanel). -
isContent3dEnabled: מציין אם האפליקציה יכולה ליצור אובייקטים תלת-ממדיים. -
isAppEnvironmentEnabled: מציין אם האפליקציה יכולה להגדיר את הסביבה. -
isPassthroughControlEnabled: מציין אם האפליקציה יכולה לשלוט במצב ה-passthrough. -
isSpatialAudioEnabled: מציין אם האפליקציה יכולה להשתמש באודיו מרחבי.
בדוגמה הבאה אפשר לראות איך בודקים אם ממשק המשתמש המרחבי מופעל:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
איך בודקים את היכולות המרחביות באמצעות SceneCore
כשמשתמשים בספריית SceneCore, צריך ליצור סשן. אחרי שיוצרים את הסשן, משתמשים ב-spatialCapabilities מ-scene של הסשן כדי לשלוח שאילתה לגבי היכולות המרחביות שזמינות כרגע.
-
SPATIAL_3D_CONTENT: הפעילות יכולה ליצור תוכן תלת-ממדי. -
APP_ENVIRONMENT: הפעילות יכולה להגדיר סביבה משלה. -
EMBED_ACTIVITY: הפעילות יכולה להטמיע פעילות אחרת במרחב. -
PASSTHROUGH_CONTROL: הפעילות יכולה להפעיל או להשבית את מצב הסביבה. -
SPATIAL_AUDIO: הפעילות יכולה להשתמש באודיו מרחבי. -
SPATIAL_UI: הפעילות יכולה להפוך למרחבית בעצמה (לדוגמה, הוספת חלונית מרחבית).
אתם יכולים גם להירשם לקריאה חוזרת (callback) 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, למשקפי VR עם Android XR ולמשקפי XR עם חיבור חוטי יש יכולות חומרה שונות, במיוחד בכל מה שקשור לסוג המסך. יכול להיות שתצטרכו להתאים את הצבעים של ממשק המשתמש של האפליקציה ושל האובייקטים שעברו רינדור כדי למקסם את החשיפה, שעשויה להיות מושפעת מסוג התצוגה וממצב המיזוג המועדף שמופעל במכשיר. DisplayBlendMode API מספק את יכולת מצב המיזוג של המכשיר לעיבוד. אפשר להשתמש ב-API הזה כדי לקבוע איך תוכן וירטואלי יתווסף לעולם האמיתי.
הנה כמה סוגים של מצבי מיזוג שכדאי להכיר:
-
ADDITIVE: תוכן וירטואלי מתווסף לעולם האמיתי על ידי הוספת ערכי הפיקסלים של כל אחד מהרכיבים אדום, ירוק וכחול. המערכת מתעלמת מהאלפא, ופיקסלים שחורים נראים שקופים. -
ALPHA_BLEND: תוכן וירטואלי מתווסף לעולם האמיתי על ידי מיזוג אלפא של ערכי הפיקסלים על סמך רכיב האלפא. -
NO_DISPLAY: המכשיר לא תומך במיזוג.
משתמשים ב-XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() מספריית Jetpack XR Runtime כדי לבדוק באיזה סוג של מצב מיזוג נעשה שימוש, ולבצע התאמות לפי הצורך.