اولین فعالیتتان را برای عینک‌های صوتی و عینک‌های نمایشگر ایجاد کنید

دستگاه‌های XR قابل‌اعمال
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
عینک‌های صوتی و
نمایشگر

تجربه‌های واقعیت افزوده برای عینک‌های صوتی و عینک‌های نمایشگر براساس API چارچوب Activity موجود Android ساخته شده است و شامل مفاهیم اضافی برای پشتیبانی از جنبه‌های منحصربه‌فرد این عینک‌ها است. برخلاف هدست‌های واقعیت گسترده که فایل کامل APK را در دستگاه اجرا می‌کنند، عینک‌های صوتی و عینک‌های نمایشگر از فعالیت اختصاصی استفاده می‌کنند که در برنامه موجود تلفن اجرا می‌شود. این فعالیت از دستگاه میزبان به عینک‌ها منتقل می‌شود.

برای ایجاد تجربه برنامه برای عینک‌های صوتی و عینک‌های نمایشگر، برنامه تلفن موجودتان را با ایجاد Activity جدیدی گسترش می‌دهید. این فعالیت به‌عنوان نقطه ورود اصلی برای راه‌اندازی برنامه در عینک عمل می‌کند. این رویکرد توسعه را ساده می‌کند زیرا می‌توانید منطق کسب‌وکار را بین تجربه‌های تلفن و عینک هم‌رسانی و دوباره استفاده کنید.

سازگاری نسخه

الزامات سازگاری «کیت توسعه نرم‌افزار Android» را برای «کیت توسعه نرم‌افزار Jetpack XR» بررسی کنید.

وابستگی‌ها

وابستگی‌های کتابخانه زیر را برای عینک صوتی و عینک نمایشگر اضافه کنید:

شیک

dependencies {
    implementation "androidx.xr.runtime:runtime:1.1.0-alpha01"
    implementation "androidx.xr.glimmer:glimmer:1.0.0-alpha18"
    implementation "androidx.xr.glimmer:glimmer-google-fonts:1.0.0-alpha18"
    implementation "androidx.xr.projected:projected:1.0.0-alpha09"
    implementation "androidx.xr.arcore:arcore:1.0.0-beta02"
}

کاتلین

dependencies {
    implementation("androidx.xr.runtime:runtime:1.1.0-alpha01")
    implementation("androidx.xr.glimmer:glimmer:1.0.0-alpha18")
    implementation("androidx.xr.glimmer:glimmer-google-fonts:1.0.0-alpha18")
    implementation("androidx.xr.projected:projected:1.0.0-alpha09")
    implementation("androidx.xr.arcore:arcore:1.0.0-beta02")
}

فعالیتتان را در مانیفست برنامه‌تان اعلام کنید

همانند سایر انواع فعالیت‌ها، باید فعالیت خود را در فایل مانیفست برنامه خود اعلام کنید تا سیستم بتواند آن را ببیند و اجرا کند.

<application>
  <activity
      android:name="com.example.xr.projected.ProjectedMainActivity"
      android:exported="true"
      android:requiredDisplayCategory="android.hardware.display.category.XR_PROJECTED"
      android:label="Example activity for audio glasses and display glasses">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.XR_PROJECTED_LAUNCHER"/>
      </intent-filter>
  </activity>
</application>

نکات کلیدی درباره کد

  • android.hardware.display.category.XR_PROJECTED را برای ویژگی android:requiredDisplayCategory مشخص می‌کند تا به سیستم بگوید که این یک فعالیت پیش‌بینی‌شده است و می‌تواند روی عینک‌های صوتی و نمایشگر پیش‌بینی شود.
  • android.intent.action.MAIN این فعالیت را به‌عنوان فعالیت راه‌اندازی پیش‌فرض تنظیم می‌کند.
  • ‫android.intent.category.XR_PROJECTED_LAUNCHER دسته‌ای تخصصی است که فعالیت پیش‌بینی‌شده شما را با فرمان‌های صوتی Gemini قابل‌کشف می‌کند.

    وقتی کاربری بااستفاده از نام برنامه فرمان صوتی صادر می‌کند (برای نمونه، «Open the AI catalog sample» (نمونه کاتالوگ هوش مصنوعی را باز کن)، «Launch the AI catalog sample» (نمونه کاتالوگ هوش مصنوعی را راه‌اندازی کن)، یا «Start the AI catalog sample» (نمونه کاتالوگ هوش مصنوعی را شروع کن))، سیستم از این دسته برای پیدا کردن و شروع کردن فعالیت تعیین‌شده در عینک‌های صوتی یا نمایشگر استفاده می‌کند.

ایجاد فعالیت

در مرحله بعد، فعالیت کوچکی ایجاد می‌کنید که هرگاه نمایشگر روشن می‌شود بتواند چیزی را در عینک هوش مصنوعی نمایش دهد.

@OptIn(ExperimentalProjectedApi::class)
class ProjectedMainActivity : ComponentActivity() {

    private var displayController: ProjectedDisplayController? = null
    private var isVisualUiSupported by mutableStateOf(false)
    private var areVisualsOn by mutableStateOf(true)

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

        lifecycle.addObserver(object : DefaultLifecycleObserver {
            override fun onDestroy(owner: LifecycleOwner) {
                displayController?.close()
                displayController = null
            }
        })

        initializeGlassesFeatures()

        setContent {
            GlimmerTheme {
                HomeScreen(
                    areVisualsOn = areVisualsOn,
                    isVisualUiSupported = isVisualUiSupported,
                    onClose = { finish() }
                )
            }
        }
    }

    private fun initializeGlassesFeatures() {
        lifecycleScope.launch {
            // Check device capabilities
            val projectedDeviceController = ProjectedDeviceController.create(this@ProjectedMainActivity)
            isVisualUiSupported = projectedDeviceController.capabilities.contains(CAPABILITY_VISUAL_UI)

            val controller = ProjectedDisplayController.create(this@ProjectedMainActivity)
            displayController = controller
            val observer = GlassesLifecycleObserver(
                context = this@ProjectedMainActivity,
                controller = controller,
                onVisualsChanged = { visualsOn -> areVisualsOn = visualsOn }
            )
            lifecycle.addObserver(observer)
        }
    }
}

نکات کلیدی درباره کد

پیاده‌سازی عنصر ترکیبی

فعالیتی که ایجاد کرده‌اید به تابع ترکیبی HomeScreen ارجاع می‌دهد که باید آن را پیاده‌سازی کنید. کد زیر از Jetpack Compose Glimmer برای تعریف یک عنصر ترکیبی استفاده می‌کند که می‌تواند مقداری نوشتار را در نمایشگر عینک نمایش دهد:

@Composable
fun HomeScreen(
    areVisualsOn: Boolean,
    isVisualUiSupported: Boolean,
    onClose: () -> Unit,
    modifier: Modifier = Modifier
) {
    Box(
        modifier = modifier
            .surface()
            .focusable(false)
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        if (isVisualUiSupported) {
            ActionCard(
                title = { Text("Android XR") },
                action = {
                    Button(onClick = onClose) {
                        Text("Close")
                    }
                }
            ) {
                if (areVisualsOn) {
                    Text("Hello, Display Glasses!")
                } else {
                    Text("Display is off. Audio guidance active.")
                }
            }
        } else {
            Text("Audio Guidance Mode Active")
        }
    }
}

نکات کلیدی درباره کد

  • همان‌طور که قبلاً در فعالیتتان تعریف کردید، عملکرد HomeScreen شامل محتوای ترکیبی است که کاربر وقتی نمایشگر عینک روشن است می‌بیند.
  • عنصر «درخشش Jetpack Compose» Text نوشتار «سلام، عینک هوش مصنوعی!» را در نمایشگر عینک نمایش می‌دهد.
  • ‫Jetpack Compose Glimmer Button با فراخوانی finish() ازطریق onClose در فعالیت پیش‌بینی‌شده، فعالیت را می‌بندد.

بررسی کنید که آیا عینک‌های صوتی یا نمایشگر متصل هستند یا خیر

برای تعیین اینکه عینک‌های صوتی یا نمایشگر کاربر قبل‌از راه‌اندازی فعالیت شما به تلفن او متصل هستند یا نه، از روش ProjectedContext.isProjectedDeviceConnected استفاده کنید. این روش Flow<Boolean> را برمی‌گرداند که برنامه‌تان می‌تواند آن را مشاهده کند تا به‌روزرسانی‌های بی‌درنگ درباره وضعیت اتصال دریافت کند.

شروع فعالیت

اکنون که فعالیت پایه‌ای ایجاد کرده‌اید، می‌توانید آن را در عینک راه‌اندازی کنید. برای دسترسی به سخت‌افزار عینک، برنامه شما باید فعالیتش را با گزینه‌های خاصی شروع کند که به سیستم می‌گوید از زمینه پیش‌بینی‌شده استفاده کند، همان‌طور که در کد زیر نشان داده شده است:

val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, ProjectedMainActivity::class.java)
context.startActivity(intent, options.toBundle())

روش createProjectedActivityOptions در ProjectedContext گزینه‌های لازم را برای شروع فعالیتتان در بافتار پیش‌بینی‌شده تولید می‌کند. پارامتر context می‌تواند زمینه‌ای از تلفن یا دستگاه عینک باشد.

مراحل بعدی

اکنون که اولین فعالیتتان را برای عینک‌های صوتی و عینک‌های نمایشگر ایجاد کرده‌اید، روش‌های دیگری را که می‌توانید کارایی آن را گسترش دهید کاوش کنید: