בדיקת הזמינות של משקפי AI בזמן ריצה

במהלך היום, יכול להיות שהמשקפיים עם ה-AI יאבדו את החיבור למכשיר המארח (למשל, הטלפון של המשתמש), או שהמשקפיים לא יהיו זמינים באופן זמני אם המשתמש יסיר אותם. כדי להתמודד עם שינויים כאלה בזמינות המכשיר, האפליקציה יכולה להשתמש ב-API של זמינות מכשיר XR, שמאחד את אותות הזמינות של המכשיר לערכים הרגילים של Android Lifecycle.State. אפשר להשתמש בממשק ה-API הזה כדי לנהל את ניתוב האודיו, את ההפעלה באמצעות מילת הפעלה וכדי לדעת מתי צפוי קלט של משתמשים בהתאם לזמינות של משקפי ה-AI.

הסבר על מצבי מחזור החיים

בטבלה הבאה מפורט המיפוי של אותות הזמינות של המכשיר לערכים של Lifecycle.State.

מצב מחזור החיים

סטטוס המכשיר

תיאור

INITIALIZED

נוצר

אובייקט מחזור החיים נוצר אבל עדיין לא נצפה.

CREATED

לא פעיל

השירות מחובר, אבל המשתמש לא עונד את המכשיר.

STARTED

פעיל

המשתמש עונד את המכשיר.

DESTROYED

מנותק מההקשר

המכשיר מנותק או שהחיבור לשירות אבד.

בדיקה ומעקב אחרי זמינות המכשיר

כדי לבדוק ולנטר את הזמינות של מכשיר, תשתמשו בהקשר משוער יחד עם מצב מחזור החיים כדי לקבוע איך האפליקציה צריכה לטפל בכל מקרה:

    // In your phone activity or service, check for projected device connection state before
    // attempting to create a projected device context and get the device lifecycle.
    ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext())
        .flatMapLatest { isConnected ->
            if (isConnected) {
                try {
                    // Create the projected device context on connection
                    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
                    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

                    // Get the device lifecycle
                    xrDevice.getLifecycle().currentStateFlow
                } catch (e: IllegalStateException) {
                    flowOf(Lifecycle.State.DESTROYED)
                }
            } else {
                flowOf(Lifecycle.State.DESTROYED)
            }
        }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
                Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ }
                else -> { /* Handle other states */ }
            }
        }
}

מידע חשוב על הקוד

  • בדיקת החיבור: לפני שתיגשו למחזור החיים של המכשיר, התקשרו אל ProjectedContext.isProjectedDeviceConnected כדי לוודא שהמכשיר המוקרן מחובר למכשיר המארח.
  • קבלת ProjectedContext: צריך להתקשר אל ProjectedContext.createProjectedDeviceContext רק אחרי שמאמתים את החיבור, ולוודא שמעבירים את ההקשר הזה למופע XrDevice.
  • טיפול בביטול תוקף של הקשר: בכל פעם שמכשיר מוקרן מתחבר, נוצר deviceId חדש. כשהמצב מגיע ל-DESTROYED, הערך הנוכחי של ProjectedContext לא תקין. צריך להפסיק להשתמש בו באופן מיידי ולהמתין לחיבור חדש.
  • אופטימיזציה של הסוללה והמשאבים: טיפול חלק ב<b>תכונות האפליקציה</b> על סמך מצב מחזור החיים, כדי לשמור על משאבי המערכת ולהפחית את צריכת הסוללה. לדוגמה, צריך לשחרר משאבים ספציפיים למשקפיים, כמו מקור נתוני מצלמה, כשמצב המעבר הוא מ-STARTED בחזרה ל-CREATED. המצב CREATED מציין שהמכשיר כבר לא על היד, ולכן חשוב להפסיק את התהליכים האלה כדי למנוע התרוקנות מיותרת של הסוללה ולשמור על פרטיות המשתמשים.