تستند تجربة النظارات الذكية إلى إطار عمل ActivityAndroid الحالي
وتتضمّن مفاهيم إضافية لدعم الجوانب الفريدة للنظارات الذكية. على عكس نظارات الواقع الممتد التي تشغّل حزمة APK كاملة على الجهاز، تستخدم نظارات الذكاء الاصطناعي نشاطًا مخصّصًا يتم تشغيله داخل التطبيق الحالي على هاتفك، ويتم عرض هذا النشاط من الجهاز المضيف إلى نظارات الذكاء الاصطناعي.
لإنشاء تجربة تطبيق النظارات الذكية المستندة إلى الذكاء الاصطناعي، يمكنك توسيع نطاق تطبيق الهاتف الحالي من خلال إنشاء Activity جديد معروض على النظارات الذكية المستندة إلى الذكاء الاصطناعي. يعمل هذا النشاط كنقطة دخول رئيسية لتشغيل تطبيقك على نظارات الذكاء الاصطناعي. يبسّط هذا النهج عملية التطوير لأنّه يتيح لك مشاركة منطق النشاط التجاري وإعادة استخدامه بين تجارب الهاتف ونظارات الذكاء الاصطناعي.
تحديد النشاط في ملف البيان الخاص بتطبيقك
وكما هو الحال مع أنواع الأنشطة الأخرى، عليك تعريف نشاطك في ملف بيان التطبيق ليتمكّن النظام من رؤيته وتشغيله.
<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لإعلام النظام بأنّ هذا النشاط يجب أن يستخدم سياقًا معروضًا للوصول إلى الأجهزة من جهاز متصل.
إنشاء نشاطك
بعد ذلك، ستنشئ نشاطًا صغيرًا يمكنه عرض محتوى على نظارات الذكاء الاصطناعي كلما تم تشغيل الشاشة.
/**
* 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()جذر شجرة واجهة المستخدم القابلة للإنشاء الخاصة بالنشاط. - يتم إعداد واجهة المستخدم أثناء تنفيذ طريقة
onCreate()الخاصة بالنشاط (راجِع دورة حياة النشاط المتوقّعة). - تُعدّ هذه السمة تخطيطًا أساسيًا
TopBarScaffoldبخلفية سوداء لواجهة المستخدم باستخدام Jetpack Compose Glimmer.
تنفيذ العنصر القابل للإنشاء
يشير النشاط الذي أنشأته إلى دالة قابلة للإنشاء DisplayUi يجب تنفيذها. يستخدم الرمز التالي Jetpack Compose Glimmer لتحديد دالة برمجية قابلة للإنشاء يمكنها عرض بعض النصوص على شاشة نظارات الذكاء الاصطناعي:
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
النقاط الرئيسية حول الرمز
- كما حدّدت في نشاطك السابق، تتضمّن الدالة
DisplayUiالمحتوى القابل للإنشاء الذي يراه المستخدم عندما تكون شاشة نظارات الذكاء الاصطناعي مفعّلة. - يعرض مكوّن Glimmer
Textفي Jetpack Compose النص "Hello World!" على شاشة النظارات.
بدء نشاطك
بعد إنشاء نشاط أساسي، يمكنك تشغيله على نظارتك. للوصول إلى أجهزة النظارات، يجب أن يبدأ تطبيقك نشاطك بخيارات محدّدة تطلب من النظام استخدام سياق معروض، كما هو موضّح في الرمز التالي:
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
تنشئ طريقة createProjectedActivityOptions() في ProjectedContext
الخيارات اللازمة لبدء نشاطك في سياق متوقّع.
يمكن أن تكون المَعلمة context سياقًا من الهاتف أو نظارات الجهاز.
التحقّق مما إذا كانت نظارات الذكاء الاصطناعي متصلة
إذا أردت تحديد ما إذا كانت نظارات الذكاء الاصطناعي الخاصة بالمستخدم مرتبطة بهاتفه قبل بدء نشاطك، استخدِم طريقة ProjectedContext.isProjectedDeviceConnected(). تعرض هذه الطريقة
Flow<Boolean> التي يمكن لتطبيقك مراقبتها للحصول على آخر الأخبار حول
حالة الاتصال في الوقت الفعلي.
الخطوات التالية
بعد إنشاء نشاطك الأول باستخدام نظارات الذكاء الاصطناعي، استكشِف طرقًا أخرى يمكنك من خلالها توسيع وظائفها:
- التعامل مع إخراج الصوت باستخدام ميزة "تحويل النص إلى كلام"
- التعامل مع إدخال الصوت باستخدام ميزة "التعرّف التلقائي على الكلام"
- إنشاء واجهة مستخدم باستخدام Jetpack Compose Glimmer
- الوصول إلى أجهزة النظارات الذكية