المدخلات المخصّصة للمصنع الأصلي للجهاز

استخدِم عمليات الإدخال المخصّصة من الشركة المصنّعة للجهاز الأصلي لإضافة أحداث إدخال جديدة في السيارة من أجل ميزات 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). الأعداد الصحيحة العامة الثلاثة هي:

  1. يمثّل العنصر الأول رمز الإدخال الذي يجب أن تحدّده الشركة المصنّعة للمعدات الأصلية. يمكنك ربط أي دلالة بالرمز المدخل.

  2. يخزّن العنصر الثاني شاشة العرض المستهدَفة، مثل الشاشة الرئيسية أو المجموعة.

  3. يحتوي العنصر الثالث على عدد المرات التي تم فيها تكرار الحدث. على سبيل المثال، للإشارة إلى عدد المرات التي تم فيها الضغط على زر.

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 الواردة، يجب أن تستوفي خدمات النظام الشروط التالية:

يوضّح الرسم البياني التالي سير عمل حدث الإدخال المخصّص من الشركة المصنّعة للجهاز الأصلي.

سير عمل الإدخال المخصّص للمصنّع الأصلي للجهاز

خدمات نظام 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 تسهيلية) لتمثيل هذه الميزة الجديدة (فتح تطبيق الخرائط مع الموقع الجغرافي الحالي للسيارة).

أثناء بدء التشغيل، تسجّل هذه الخدمة نفسها في CarInputManager من خلال requestInputEventCapture (راجِع رمز التسجيل في التنفيذ المرجعي).

عند تلقّي أحداث CustomInputEvents واردة، ترسل هذه الخدمة الغرض لبدء تطبيق "خرائط Google". لمعرفة كيفية تنفيذ ذلك، راجِع CustomInputEventListener.java.