יצירת הפעילות הראשונה במשקפי AI

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי AI

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

כדי ליצור את חוויית השימוש באפליקציה במשקפיים מבוססי-AI, מרחיבים את האפליקציה הקיימת לטלפון על ידי יצירת Activity חדש למשקפיים מבוססי-AI. הפעילות הזו משמשת כנקודת הכניסה העיקרית להפעלת האפליקציה במשקפי AI. הגישה הזו מפשטת את הפיתוח כי אפשר לשתף את הלוגיקה העסקית ולעשות בה שימוש חוזר בין חוויות השימוש בטלפון ובמשקפיים עם AI.

הצהרה על הפעילות במניפסט של האפליקציה

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

<application>
    <activity
        android:name=".AIGlassesActivity"
        android:exported="true"
        android:requiredDisplayCategory="xr_projected"
        android:label="Example AI Glasses activity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
      </intent-filter>
    </activity>
</application>

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

  • הערך xr_projected במאפיין android:requiredDisplayCategory מציין למערכת שהפעילות הזו צריכה להשתמש בהקשר מוקרן כדי לגשת לחומרה ממכשיר מחובר.

ליצור את הפעילות

לאחר מכן, תיצרו פעילות קטנה שיכולה להציג משהו במשקפי ה-AI בכל פעם שהתצוגה מופעלת.

/**
 *   When this activity launches, it stays in the started state.
 */
class AIGlassesActivity : ComponentActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val projectedWindowManager = ProjectedWindowManager.create(this)

    setContent {

      GlassesComposeContent {
        GlimmerTheme {
          TopBarScaffold(modifier = Modifier.background(color = Color.Black)) {

            ProjectedDisplayController.create(activity)
            .addPresentationModeChangedListener {
            presentationModeFlags ->

            // Check whether visuals are on or off
            val areVisualsOff = !presentationModeFlags.hasPresentationMode(VISUALS_ON)
            }

            // Conditional UI based on presentation mode.
            if (areVisualsOff) {
              // Implementation for the when the display is off.
            } else {
              DisplayUi()
            }
          }
        }
      }
    }
  }

  override fun onStart() {
    // Do things to make the user aware that this activity is active (for
    // example, play audio frequently), when the display is off.
  }

  override fun onStop() {
    // Stop all the data source access.
  }

}

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

  • AIGlassesActivity מרחיב את ComponentActivity, בדיוק כמו שקורה בפיתוח לנייד.
  • בלוק setContent בתוך onCreate() מגדיר את הרמה הבסיסית (root) של עץ ממשק המשתמש הקומפוזבילי של הפעילות.
  • מאתחל את ממשק המשתמש במהלך ה-method onCreate() של הפעילות (ראו מחזור החיים של פעילות מוקרנת).
  • מגדיר פריסת בסיס TopBarScaffold עם רקע שחור לממשק המשתמש באמצעות Jetpack Compose Glimmer.

להטמיע את הרכיב הקומפוזבילי

הפעילות שיצרתם מפנה אל פונקציית DisplayUi הניתנת להגדרה שצריך להטמיע. בדוגמה הבאה של קוד נעשה שימוש ב-Jetpack Compose Glimmer כדי להגדיר קומפוזיציה שיכולה להציג טקסט כלשהו במסך של משקפי ה-AI:

@Composable
fun DisplayUi() {
    Box(
        modifier = Modifier
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        Text("Hello World!")
    }
}

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

  • כמו שהגדרתם בפעילות הקודמת, הפונקציה DisplayUi כוללת את התוכן הקומפוזבילי שהמשתמש רואה כשהמסך של משקפי ה-AI פועל.
  • רכיב Jetpack Compose Glimmer Text מציג את הטקסט Hello World! במסך של המשקפיים.

התחלת הפעילות

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

val options = ProjectedContext.createProjectedActivityOptions(context)

val intent = Intent(context, AIGlassesActivity::class.java)

context.startActivity(intent, options.toBundle())

ה-method createProjectedActivityOptions() ב-ProjectedContext יוצרת את האפשרויות הנדרשות כדי להתחיל את הפעילות בהקשר מוקרן. הפרמטר context יכול להיות הקשר מהטלפון או מהמשקפיים.

בדיקה אם משקפי ה-AI מחוברים

אם רוצים לקבוע אם משקפי ה-AI של המשתמש מחוברים לטלפון שלו לפני שמפעילים את הפעילות, משתמשים בשיטה ProjectedContext.isProjectedDeviceConnected(). השיטה הזו מחזירה Flow<Boolean> שאפשר להשתמש בו באפליקציה כדי לקבל עדכונים בזמן אמת על סטטוס החיבור.

השלבים הבאים

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