إنشاء نشاطك الأول لنظارات الذكاء الاصطناعي

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
نظارات الذكاء الاصطناعي

تستند تجربة النظارات الذكية التي تعمل بالذكاء الاصطناعي إلى Activity واجهة برمجة التطبيقات الحالية لإطار عمل Android، وتتضمّن مفاهيم إضافية لدعم الجوانب الفريدة للنظارات الذكية التي تعمل بالذكاء الاصطناعي. على عكس نظارات الواقع الممتد التي تشغّل حزمة APK كاملة على الجهاز، تستخدم نظارات الذكاء الاصطناعي نشاطًا مخصّصًا يتم تشغيله داخل التطبيق الحالي على هاتفك، ويتم عرض هذا النشاط من الجهاز المضيف إلى نظارات الذكاء الاصطناعي.

لإنشاء تجربة تطبيق النظارات الذكية المستندة إلى الذكاء الاصطناعي، يمكنك توسيع نطاق تطبيقك الحالي على الهاتف من خلال إنشاء Activity جديد مخصّص للنظارات الذكية المستندة إلى الذكاء الاصطناعي. يعمل هذا النشاط كنقطة دخول رئيسية لتشغيل تطبيقك على نظارات الذكاء الاصطناعي. يبسّط هذا النهج عملية التطوير لأنّه يتيح لك مشاركة منطق النشاط التجاري وإعادة استخدامه بين تجاربك على الهاتف ونظارات الذكاء الاصطناعي.

التوافق مع الإصدارات

راجِع متطلبات التوافق مع حزمة تطوير البرامج (SDK) لنظام التشغيل Android الخاصة بحزمة Jetpack XR SDK.

الاعتمادية

أضِف اعتماديات المكتبة التالية لنظارات الذكاء الاصطناعي:

Groovy

dependencies {
    implementation "androidx.xr.runtime:runtime:1.0.0-alpha10"
    implementation "androidx.xr.glimmer:glimmer:1.0.0-alpha06"
    implementation "androidx.xr.projected:projected:1.0.0-alpha04"
    implementation "androidx.xr.arcore:arcore:1.0.0-alpha10"
}

Kotlin

dependencies {
    implementation("androidx.xr.runtime:runtime:1.0.0-alpha10")
    implementation("androidx.xr.glimmer:glimmer:1.0.0-alpha06")
    implementation("androidx.xr.projected:projected:1.0.0-alpha04")
    implementation("androidx.xr.arcore:arcore:1.0.0-alpha10")
}

تعريف النشاط في ملف البيان الخاص بتطبيقك

وكما هو الحال مع أنواع الأنشطة الأخرى، عليك تعريف نشاطك في ملف بيان التطبيق ليتمكّن النظام من رؤيته وتشغيله.

<application>
  <activity
      android:name="com.example.xr.projected.GlassesMainActivity"
      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 لإعلام النظام بأنّ هذا النشاط يجب أن يستخدم سياقًا متوقّعًا للوصول إلى الأجهزة من جهاز متصل.

إنشاء نشاطك

بعد ذلك، ستنشئ نشاطًا صغيرًا يمكنه عرض محتوى على النظارات الذكية التي تعمل بالذكاء الاصطناعي كلما كانت الشاشة قيد التشغيل.

@OptIn(ExperimentalProjectedApi::class)
class GlassesMainActivity : 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
            }
        })

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

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

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

النقاط الرئيسية حول الرمز

تنفيذ العنصر القابل للإنشاء

يشير النشاط الذي أنشأته إلى دالة قابلة للإنشاء 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) {
            Card(
                title = { Text("Android XR") },
                action = {
                    Button(onClick = onClose) {
                        Text("Close")
                    }
                }
            ) {
                if (areVisualsOn) {
                    Text("Hello, AI Glasses!")
                } else {
                    Text("Display is off. Audio guidance active.")
                }
            }
        } else {
            Text("Audio Guidance Mode Active")
        }
    }
}

النقاط الرئيسية حول الرمز

  • كما حدّدت في نشاطك السابق، تتضمّن الدالة HomeScreen المحتوى القابل للإنشاء الذي يراه المستخدم عندما تكون شاشة نظارات الذكاء الاصطناعي مفعّلة.
  • يعرض مكوّن Glimmer Text في Jetpack Compose النص "مرحبًا، نظارات الذكاء الاصطناعي!" على شاشة النظارات.
  • يُغلِق تطبيق Jetpack Compose Glimmer Button النشاط من خلال استدعاء finish() من خلال onClose في نشاط نظارات الذكاء الاصطناعي.

التحقّق مما إذا كانت نظارات الذكاء الاصطناعي متصلة

لتحديد ما إذا كانت نظارات الذكاء الاصطناعي الخاصة بالمستخدم مرتبطة بهاتفه قبل بدء نشاطك، استخدِم طريقة ProjectedContext.isProjectedDeviceConnected. تعرض هذه الطريقة Flow<Boolean> التي يمكن لتطبيقك مراقبتها للحصول على آخر الأخبار حول حالة الاتصال في الوقت الفعلي.

بدء نشاطك

بعد إنشاء نشاط أساسي، يمكنك تشغيله على نظارتك. للوصول إلى أجهزة النظارات، يجب أن يبدأ تطبيقك نشاطك بخيارات معيّنة تطلب من النظام استخدام سياق معروض، كما هو موضّح في الرمز التالي:

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

تنشئ طريقة createProjectedActivityOptions في ProjectedContext الخيارات اللازمة لبدء نشاطك في سياق متوقّع. يمكن أن تكون المَعلمة context سياقًا من الهاتف أو جهاز النظارات.

الخطوات التالية

بعد إنشاء نشاطك الأول باستخدام نظارات الذكاء الاصطناعي، استكشِف طرقًا أخرى يمكنك من خلالها توسيع وظائفها: