تتطلّب أجهزة التلفزيون جهازًا ثانويًا للتفاعل مع التطبيقات، مثل جهاز تحكّم عن بُعد أساسي أو جهاز تحكّم عن بُعد مزوّد بمؤشر أو ذراع التحكّم في الألعاب. لتقديم تجربة متّسقة للمستخدمين، يجب أن يتيح تطبيقك إدخال البيانات باستخدام لوحة التحكّم الاتجاهية، وأن يتعامل مع أجهزة التحكّم التي يتم إيقافها، وأن يتيح إدخال البيانات من أنواع متعددة من أجهزة التحكّم، بما في ذلك أجهزة التحكّم عن بُعد التي تعمل بالليزر.
الحدّ الأدنى من عناصر التحكّم في لوحة التحكّم
وحدة التحكّم التلقائية لجهاز تلفزيون هي لوحة التحكّم الاتجاهية. بشكل عام، يجب أن يكون تطبيقك قابلاً للتشغيل باستخدام جهاز تحكّم عن بُعد مزوّد بأزرار للأعلى والأسفل واليمين واليسار والاختيار والرجوع والشاشة الرئيسية فقط. إذا كان تطبيقك عبارة عن لعبة تتطلّب عادةً ذراع تحكّم في الألعاب يتضمّن عناصر تحكّم إضافية، حاوِل إتاحة اللعب باستخدام عناصر التحكّم في لوحة الاتجاهات فقط. في ما عدا ذلك، يجب تحذير المستخدم من أنّه يجب استخدام وحدة تحكّم، والسماح له بالخروج من اللعبة بشكل سلس باستخدام لوحة التحكم.
لمزيد من المعلومات حول التنقّل باستخدام وحدات التحكّم بلوحة الاتجاهات لأجهزة التلفزيون، يُرجى الاطّلاع على مقالة التنقّل على التلفزيون.
التعامل مع حالات فصل وحدة التحكّم
تكون وحدات التحكّم في التلفزيون غالبًا أجهزة بلوتوث، وقد تحاول توفير الطاقة من خلال الانتقال بشكل دوري إلى وضع السكون وإلغاء ربطها بجهاز التلفزيون. وهذا يعني أنّه قد يتم إيقاف تطبيق أو إعادة تشغيله إذا لم يتم ضبطه للتعامل مع أحداث إعادة الاتصال هذه. يمكن أن تحدث هذه الأحداث في أيّ من الحالات التالية:
- أثناء تشغيل فيديو مدته عدة دقائق، قد تنتقل لوحة التحكم أو ذراع التحكّم في الألعاب إلى وضع السكون، وينقطع الاتصال بجهاز التلفزيون، ثم يعود الاتصال لاحقًا.
- أثناء اللعب، قد ينضم لاعب جديد إلى اللعبة باستخدام ذراع تحكّم في الألعاب غير متصلة حاليًا.
- أثناء اللعب، قد يغادر اللاعب اللعبة ويفصل ذراع التحكّم في الألعاب.
يجب ضبط أي نشاط لتطبيق بث تلفزيوني يخضع لأحداث قطع الاتصال وإعادة الاتصال من أجل التعامل مع أحداث إعادة الاتصال في بيان التطبيق. يوضّح نموذج الرمز التالي كيفية تفعيل نشاط للتعامل مع تغييرات الإعدادات، بما في ذلك توصيل لوحة مفاتيح أو جهاز تنقّل أو فصلهما أو إعادة توصيلهما:
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|navigation"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
...
</activity>
يتيح هذا التغيير في الإعدادات استمرار تشغيل التطبيق من خلال حدث إعادة الاتصال، بدلاً من أن يعيد إطار عمل Android تشغيله، ما يوفّر تجربة أفضل للمستخدم.
التعامل مع أشكال الإدخال المختلفة باستخدام لوحة التحكّم
قد يستخدم مستخدمو أجهزة التلفزيون أكثر من نوع واحد من أدوات التحكّم مع أجهزة التلفزيون. على سبيل المثال، قد يستخدم المستخدم جهاز تحكّم أساسي بلوحة التحكم أو جهاز تحكّم عن بُعد مزوّدًا بمؤشر أو ذراع التحكّم في الألعاب. قد تختلف رموز المفاتيح التي يوفّرها ذراع التحكّم في الألعاب عند استخدامه في وظائف لوحة التحكّم الاتجاهية عن رموز المفاتيح التي ترسلها لوحة تحكّم اتجاهية أساسية.
تعامَل مع الاختلافات في إدخال لوحة التحكّم الاتجاهية حتى لا يضطر المستخدم إلى تبديل وحدات التحكّم لتشغيل تطبيقك. لمزيد من المعلومات حول التعامل مع الاختلافات في الإدخال، راجِع معالجة إدخال لوحة التحكّم الاتجاهية.
أجهزة التحكّم عن بُعد التي تعمل باللمس
تتوافق بعض أجهزة التلفزيون مع أجهزة التحكّم عن بُعد التي تتضمّن مؤشرًا، مثل الفأرة الهوائية أو أجهزة التحكّم عن بُعد التي تتضمّن لوحات توجيه حسّاسة للمس (لوحات تتبُّع). يتيح دعم أجهزة التحكّم عن بُعد بالمؤشر للمستخدمين التفاعل مع تطبيقك باستخدام إيماءات الإشارة والنقر والتمرير والتمرير السريع والسحب، ما يوفّر تجربة أكثر سلاسة على الأجهزة المتوافقة مع الحفاظ على التوافق الكامل مع لوحة التحكّم الاتجاهية.
تحديد إمكانية استخدام جهاز تحكّم عن بُعد مزوّد بمؤشر في البيان
للإشارة إلى أنّ تطبيقك يمكن التنقّل فيه باستخدام المؤشر وإدخال اللمس، اضبط بيان تطبيقك على أن تكون قيمة البيانات الوصفية android.software.leanback.supports_touch هي true:
<manifest ...>
<!-- Signal whether the app is adaptive or built just for TV -->
<uses-feature
android:name="android.software.leanback"
android:required="true|false" />
<!-- Ensure the app can be installed on conventional TVs -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Signal whether the app supports pointer remotes -->
<meta-data
android:name="android.software.leanback.supports_touch"
android:value="true" />
<application ...>
...
</application>
</manifest>
إتاحة التفاعلات من خلال النقر والتمرير والتحريك
عند توفير إمكانية استخدام أجهزة التحكّم عن بُعد التي تعمل بالمؤشر، تأكَّد من أنّ عناصر واجهة المستخدم تستجيب بشكل مناسب لإدخال المؤشر واللمس في التفاعلات التالية:
- النقر والاختيار: يجب أن تكون جميع عناصر واجهة المستخدم القابلة للتركيز والقابلة للتحديد قابلة للنقر باستخدام جهاز التحكّم عن بُعد المؤشر، بما يتوافق مع سلوك الاختيار باستخدام لوحة التحكّم (
KEYCODE_DPAD_CENTER).- Jetpack Compose: استخدِم المعدِّلات
Modifier.clickable()أوpointerInput. لمزيد من التفاصيل، يُرجى الاطّلاع على النقر مع الاستمرار. - طرق العرض: تعالج أحداث النقر على طرق العرض. لمزيد من التفاصيل، يُرجى الاطّلاع على نظرة عامة على أحداث الإدخال.
- Jetpack Compose: استخدِم المعدِّلات
- حالات التمرير المرئية: توفّر تأثيرًا مرئيًا واضحًا عند التمرير للإشارة إلى أنّ مؤشر الماوس موضوع فوق عنصر قابل للتحديد.
- Jetpack Compose: استخدِم
Modifier.hoverable()أو راقِب حالات التمرير باستخدامInteractionSource. لمزيد من التفاصيل، يُرجى الاطّلاع على التعامل مع تفاعلات المستخدمين. - طرق العرض: حدِّد حالات التمرير باستخدام عناصر قابلة للرسم في قائمة الحالات مع
android:state_hovered="true".
- Jetpack Compose: استخدِم
- التمرير السريع والتمرير السريع مع الإفلات: يجب أن يعمل التمرير الأفقي والعمودي الذي يتم تنشيطه من خلال التمرير السريع أو التمرير السريع مع الإفلات على زر لوحة التحكّم الوسطى الحساس للمس بسلاسة على جميع المحتوى القابل للتمرير.
- التمرير بالسحب: يجب أن يتمكّن المستخدمون من السحب للتمرير عموديًا (للأعلى والأسفل) أو أفقيًا (لليمين واليسار) في الحاويات القابلة للتمرير.
- Jetpack Compose: تتيح الحاويات العادية القابلة للتمرير التمرير باستخدام المؤشر واللمس تلقائيًا. بالنسبة إلى عمليات التنفيذ المخصّصة، يُرجى الاطّلاع على إدخال المؤشر في Compose.
- طرق العرض: تتيح طرق العرض العادية القابلة للتمرير التمرير باللمس تلقائيًا. لمزيد من المعلومات حول معالجة الإدخال المخصّص، يُرجى الاطّلاع على اللمس والإدخال.
- التقديم السريع أو الترجيع أثناء تشغيل الوسائط: أثناء تشغيل الوسائط (مثل البرامج التلفزيونية والأفلام)، يجب أن يتمكّن المستخدمون من التفاعل مع شريط تقدّم التشغيل (شريط البحث) من خلال التأشير والنقر للانتقال إلى طابع زمني سابق أو لاحق، بالإضافة إلى السحب (التقديم السريع أو الترجيع) على طول شريط التقدّم للبحث عن وقت معيّن.
التعامل مع أحداث الأزرار
عندما ينقر المستخدم على زر في وحدة التحكّم، يتلقّى تطبيقك حدثًا يتضمّن KeyEvent. قد يكون السلوك المقصود للزر حدث وسائط، مثل التشغيل أو الإيقاف المؤقت أو الإيقاف، أو قد يكون حدثًا من نوع التلفزيون، مثل الاختيار أو التنقّل. لتقديم تجربة مستخدم جيدة، يجب تحديد سلوك متّسق لأزرار وحدة التحكّم.
أحداث واجهة مستخدم التلفزيون
حدِّد سلوك واجهة مستخدم التلفزيون للأزرار التي تنشئ أنواع KeyEvent كما هو موضّح في الجدول التالي:
KeyEvent |
السلوك |
|---|---|
KEYCODE_BUTTON_B، KEYCODE_BACK |
رجوع |
KEYCODE_BUTTON_SELECT، KEYCODE_BUTTON_A، KEYCODE_ENTER، KEYCODE_DPAD_CENTER، KEYCODE_NUMPAD_ENTER |
خيارات |
KEYCODE_DPAD_UP وKEYCODE_DPAD_DOWN وKEYCODE_DPAD_LEFT وKEYCODE_DPAD_RIGHT |
التنقل |
أحداث الوسائط
عندما يشاهد المستخدم وسائط، عليك تحديد سلوك للأزرار التي تنشئ أنواع KeyEvent كما هو موضّح في الجدول التالي. إذا كان تطبيقك يتحكّم في MediaSession، استخدِم MediaControllerAdapter لاستدعاء إحدى طرق MediaControllerCompat.TransportControls الموضّحة في الجدول. يُرجى العِلم أنّ أزرار الاختيار تعمل كأزرار "تشغيل" أو "إيقاف مؤقت" في هذا السياق.
KeyEvent |
استدعاء TransportControls | السلوك |
|---|---|---|
BUTTON_SELECT، BUTTON_A، ENTER، DPAD_CENTER، KEYCODE_NUMPAD_ENTER |
play() |
تشغيل |
BUTTON_START، BUTTON_SELECT، BUTTON_A، ENTER، DPAD_CENTER، KEYCODE_NUMPAD_ENTER |
pause() |
إيقاف مؤقت |
BUTTON_R1 |
skipToNext() |
التخطي إلى التالي |
BUTTON_L1 |
skipToPrevious() |
التخطي إلى السابق |
DPAD_RIGHT وBUTTON_R2 وAXIS_RTRIGGER وAXIS_THROTTLE |
fastForward() |
تقديم سريع |
DPAD_LEFT وBUTTON_L2 وAXIS_LTRIGGER وAXIS_BRAKE |
rewind() |
ترجيع |
| لا ينطبق | stop() |
إيقاف |
توفير سلوك مناسب لزر الرجوع
يجب ألا يعمل زر "رجوع" كزر تبديل. على سبيل المثال، لا تستخدمه لفتح قائمة وإغلاقها في الوقت نفسه. يجب استخدام هذا الزر للتنقّل للخلف فقط، على طريقة مسار التنقّل، من خلال الشاشات السابقة التي انتقل إليها المشغّل.
بما أنّ زر الرجوع يؤدي فقط وظيفة التنقّل الخطي للخلف، يمكنك استخدامه لمغادرة قائمة داخل التطبيق تم فتحها باستخدام زر مختلف والعودة إلى التطبيق. ويجب أن يؤدي الضغط المتكرر على زر الرجوع في النهاية إلى شاشة Android TV الرئيسية. على سبيل المثال: لعب لعبة > شاشة إيقاف اللعبة مؤقتًا > شاشة اللعبة الرئيسية > شاشة Android TV الرئيسية أو تشغيل برنامج تلفزيوني > شاشة تطبيق التلفزيون الرئيسية
شاشة Android TV الرئيسية
لمزيد من المعلومات حول تصميم التنقّل، يُرجى الاطّلاع على تصميم التنقّل للخلف ولأعلى. لمعرفة المزيد عن عملية التنفيذ، يُرجى الرجوع إلى مقالة توفير التنقّل السليم للخلف.
التعامل مع أدوات التحكّم في الألعاب
عند إنشاء ألعاب لأجهزة Android TV، صمِّم نظام التحكّم ليتوافق مع أجهزة التحكّم عن بُعد العادية في التلفزيون وأذرع التحكّم المخصّصة للألعاب.
التوافق مع عناصر التحكّم في لوحة التحكّم
خطِّط لنظام التحكّم الخاص بك حول زر التحكّم الاتجاهي، لأنّ مجموعة عناصر التحكّم هذه هي الإعداد التلقائي لأجهزة Android TV. يجب أن يتمكّن اللاعب من استخدام لوحة التحكّم في جميع جوانب اللعبة، وليس فقط في التحكّم في طريقة اللعب الأساسية، بل أيضًا في التنقّل بين القوائم والإعلانات. لهذا السبب، احرص على ألا تشير لعبة Android TV إلى واجهة تعمل باللمس باستخدام عبارات مثل "انقر هنا للمتابعة".
يمكن أن يكون تحديد طريقة تفاعل اللاعب مع وحدة التحكّم عاملاً أساسيًا في تقديم تجربة رائعة للمستخدم. ننصحك باتّباع أفضل الممارسات التالية:
- توضيح متطلبات وحدة التحكّم مسبقًا: استخدِم وصفك على Google Play لتوضيح أي توقعات بشأن وحدات التحكّم للاعبين. إذا كانت اللعبة تتطلّب استخدام جهاز تحكّم في الألعاب مزوّد بذراع تحكّم بدلاً من جهاز تحكّم في الألعاب مزوّد بلوحة التحكم فقط، يجب توضيح ذلك. قد يحصل اللاعب الذي يستخدم جهاز تحكّم غير مناسب للعبة على تجربة سيئة ويقيّم لعبتك بتقييم منخفض.
- استخدام عملية ربط الأزرار بشكل متّسق: إنّ عملية ربط الأزرار بشكل سهل الاستخدام هي أساس تجربة المستخدم الجيدة. على سبيل المثال، اتّبِع العادات المقبولة باستخدام الزر A للقبول والزر B للإلغاء. يمكنك أيضًا توفير المرونة من خلال السماح للمستخدم بإعادة تعيين أزرار. لمزيد من المعلومات حول ربط الأزرار، يُرجى الاطّلاع على التعامل مع إجراءات وحدة التحكّم.
- رصد إمكانات وحدة التحكّم وتعديلها وفقًا لذلك: يمكنك الاستعلام من وحدة التحكّم عن إمكاناتها لتحسين التوافق بين وحدة التحكّم واللعبة. على سبيل المثال، قد تريد أن يوجّه اللاعب عنصرًا ما عن طريق تحريك ذراع التحكّم في الهواء، ولكن إذا كان ذراع التحكّم لا يتضمّن أجهزة استشعار التسارع والجيروسكوب، لن ينجح التحريك. استعلم عن وحدة التحكّم، وإذا لم تكن ميزة "كشف الحركة" متاحة، انتقِل إلى نظام تحكّم بديل متاح. لمزيد من المعلومات حول طلب إمكانات وحدة التحكّم، يُرجى الاطّلاع على وحدات التحكّم المتوافقة مع جميع إصدارات Android.
استخدام الأزرار المناسبة
لا تتضمّن بعض وحدات التحكّم في الألعاب أزرار "بدء" أو "بحث" أو "قائمة". تأكَّد من أنّ واجهة المستخدم لا تعتمد على استخدام هذه الأزرار.
التعامل مع وحدات تحكّم متعددة
عندما يلعب عدة لاعبين لعبة ما، ويستخدم كل منهم وحدة تحكّم خاصة به، من المهم ربط كل لاعب بوحدة التحكّم التي يستخدمها. للحصول على معلومات حول كيفية تنفيذ عملية تحديد رقم وحدة التحكّم، يُرجى الاطّلاع على getControllerNumber().
التعامل مع حالات فصل وحدة التحكّم
عندما يتم فصل وحدة التحكّم أثناء اللعب، أوقِف اللعبة مؤقتًا واعرض مربّع حوار يطلب من اللاعب الذي تم فصل وحدة التحكّم الخاصة به إعادة ربطها.
قدِّم أيضًا نصائح لتحديد المشاكل وحلّها في مربّع الحوار. على سبيل المثال، اطلب من المشغّل "التحقّق من اتصال البلوتوث". لمزيد من المعلومات حول تنفيذ ميزة التوافق مع أجهزة الإدخال، يُرجى الاطّلاع على التعامل مع إجراءات وحدة التحكّم ونظرة عامة على البلوتوث.
عرض تعليمات وحدة التحكّم
إذا كانت لعبتك تقدّم تعليمات مرئية للتحكّم في اللعبة، استخدِم صورة لوحدة تحكّم لا تتضمّن أي علامات تجارية ولا تتضمّن سوى الأزرار المتوافقة مع Android.
للحصول على عيّنات من صور وحدة التحكّم المتوافقة مع Android، نزِّل نموذج لوحة ألعاب Android TV (ملف ZIP). يتضمّن هذا الملف وحدة تحكّم بيضاء على خلفية سوداء ووحدة تحكّم سوداء على خلفية بيضاء، كما هو موضّح في الشكل 1، وذلك كملف PNG وملف Adobe® Illustrator®.