استخدِم عمليات الإدخال المخصّصة من الشركة المصنّعة للجهاز الأصلي لإضافة أحداث إدخال جديدة في السيارة من أجل ميزات Android الجديدة وغير العادية. لا يتم ربط أحداث الإدخال غير العادية باستخدام
KeyEvent
Android الحالي، الذي تم تصميمه ليكون عامًا ويعمل على أي سطح Android،
ولكن لم يتم توسيعه لتنفيذ ميزات خاصة بالمصنّع الأصلي للجهاز. على سبيل المثال، زر
موجود على عجلة القيادة، وعند الضغط عليه، يتم فتح تطبيق خرائط
(من خلال intent) مع الموقع الجغرافي الحالي للسيارة. تتيح هذه الميزة للسائقين عرض موقعهم الجغرافي الحالي بدون تشتيت انتباههم أثناء القيادة.
توضّح هذه المقالة كيفية إعادة استخدام KeyEvent
حالي في Android لإنشاء CustomInputEvent
لاستخدامه فقط عندما لا يمكن استخدام KeyEvent
في Android لتمثيل الميزة.
HW_CUSTOM_INPUT
يتم تمثيل الإدخال المخصّص من قِبل الشركة المصنّعة للجهاز باستخدام HW_CUSTOM_INPUT و
CustomInputEvent.java. HW_CUSTOM_INPUT هو الحدث الأصلي الذي يتم إنشاؤه بواسطة أجهزة السيارة (Vehicle HAL). تحدّد الشركات المصنّعة للأجهزة الأصلية طريقة إنشاء مثيل لهذا الحدث. تم ضبط إذن الوصول إلى HW_CUSTOM_INPUT على [للقراءة فقط]، مع VehiclePropertyAccess:READ
.
لضمان إمكانية بث أحدث قيمة متاحة دائمًا من خلال Vehicle HAL، يتم ضبط الإشعار HW_CUSTOM_INPUT على ON_CHANGE
، مع VehiclePropertyChangeMode:ON_CHANGE
.
تتألف قيم HW_CUSTOM_INPUT من مصفوفة من القيم العامة
int32
، ويتم ضبطها على النحو GLOBAL
(مع VehicleArea:GLOBAL
). الأعداد الصحيحة العامة الثلاثة هي:
يمثّل العنصر الأول رمز الإدخال الذي يجب أن تحدّده الشركة المصنّعة للمعدات الأصلية. يمكنك ربط أي دلالة بالرمز المدخل.
يخزّن العنصر الثاني شاشة العرض المستهدَفة، مثل الشاشة الرئيسية أو المجموعة.
يحتوي العنصر الثالث على عدد المرات التي تم فيها تكرار الحدث. على سبيل المثال، للإشارة إلى عدد المرات التي تم فيها الضغط على زر.
CustomInputEvent وCar Input API
InputHalService هي خدمة السيارة التي تتلقّى HW_CUSTOM_INPUT
واردة من Vehicle HAL.
تحوّل InputHalService HW_CUSTOM_INPUT
الوارد إلى CustomInputEvent
، وهو فئة parcelable بلغة Java تقع في car-lib/src/android/car/input، بالإضافة إلى واجهة aidl المعنية.
تتلقّى CarInputService، وهي خدمة أساسية لإدخال البيانات في السيارة، أحداث CustomInputEvents الواردة ثم ترسلها إلى أي خدمة مسجَّلة تابعة لنظام Android.
لتسجيل CustomInputEvents الواردة وتلقّيها، يجب أن تستوفي خدمات النظام ما يلي:
سجِّل من خلال CarInputManager#requestInputEventCapture، مع تمرير
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
كمعلَمة نوع الإدخال.لإلغاء التسجيل، يجب أن تستدعي الخدمات CarInputManager#releaseInputEventCapture.
يوضّح الرسم البياني التالي سير عمل حدث الإدخال المخصّص من الشركة المصنّعة للجهاز الأصلي.
خدمات نظام Android للمصنّعين الأصليين
توفّر الشركات المصنّعة للأجهزة خدمة نظام Android للتعامل مع أحداث CustomInputEvents الواردة من CarInputService
.
يمكن فقط للخدمات التي تحمل إذن امتياز android.permission.INJECT_EVENTS التسجيل وتلقّي CustomInputEvents من Car Input API (CarInputManager). لا يمكن توقيع أي خدمة أو تطبيق تابعَين لجهة خارجية باستخدام إذن نظام التشغيل Android هذا (خدمات الشركة المصنّعة للجهاز فقط). لذلك، لا يمكن لأي خدمة أو تطبيق تابعَين لجهة خارجية التسجيل في واجهة برمجة التطبيقات Car Input API.
يمكن لخدمات نظام التشغيل Android لدى المصنّع الأصلي للجهاز الوصول إلى SystemApi
والطُرق العامة.
التنفيذ المرجعي
يمكنك الاطّلاع على التنفيذ المرجعي في packages/services/Car/tests/SampleCustomInputService، والذي يتم توفيره كمثال وإرشادات. على سبيل المثال، لإضافة زر جديد في أزرار التحكّم بعجلة القيادة. عند الضغط على هذا الزر الجديد، سيتم تشغيل تطبيق "خرائط Google" مع عرض الموقع الجغرافي الحالي للسيارة.
في هذا المثال، اختارت الشركة المصنّعة للمعدات الأصلية INPUT_CODE_F1
(أول دالة CustomInputEvent
تسهيلية) لتمثيل هذه الميزة الجديدة (فتح تطبيق "خرائط Google" باستخدام
الموقع الجغرافي الحالي للسيارة).
أثناء بدء التشغيل، تسجّل هذه الخدمة نفسها في CarInputManager
من خلال requestInputEventCapture
(راجِع
رمز التسجيل في التنفيذ المرجعي).
عند تلقّي أحداث CustomInputEvents واردة، ترسل هذه الخدمة الغرض لبدء تطبيق "خرائط Google". لمعرفة كيفية تنفيذ ذلك، راجِع CustomInputEventListener.java.