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

استخدِم مدخلات مخصّصة لمصنعي المعدّات الأصلية لإضافة أحداث إدخال جديدة للسيارة لميزات Android الجديدة وغير العادية. لا يتم ربط أحداث الإدخال غير العادية من خلال الإصدار الحالي من IDE IDEKeyEvent، الذي تم تصميمه ليكون عامًا ويعمل على أي سطح Android ولكنه لم يتم توسيعه لتنفيذ الميزات الخاصة بالمصنّعين الأصليين للأجهزة. على سبيل المثال، زر يقع على وحدة التحكّم في عجلة القيادة، وعند الضغط عليه، يفتح تطبيق خرائط (من خلال نية) يعرض الموقع الجغرافي الحالي للسيارة. تتيح هذه الميزة للسائقين الاطّلاع على موقعهم الجغرافي الحالي بدون تشتيت انتباههم أثناء القيادة.

توضّح هذه المقالة كيفية إعادة استخدام KeyEvent Android حالي لإنشاء CustomInputEvent فقط عندما لا يمكن استخدام KeyEvent Android لتمثيل الميزة.

HW_CUSTOM_INPUT

يتم تمثيل الإدخال المخصّص من المصنّع الأصلي للجهاز من خلال HW_CUSTOM_INPUT و CustomInputEvent.java. HW_CUSTOM_INPUT هو الحدث الأصلي الذي تم إنشاؤه بواسطة أجهزة السيارة (HAL للمركبة). تحدِّد المصنّعين الأصليّين للأجهزة كيفية إنشاء مثيل لهذا الحدث. تم تحديد إذن الوصول إلى HW_CUSTOM_INPUT على [للقراءة فقط] باستخدام VehiclePropertyAccess:READ.

لضمان أن يتمكّن Vehicle HAL من بث أحدث قيمة متاحة في جميع الأوقات، يتم ضبط الإشعار HW_CUSTOM_INPUT على ON_CHANGE، مع VehiclePropertyChangeMode:ON_CHANGE.

تتألّف قيم HW_CUSTOM_INPUT من صفيف من int32 العام، ويتم ضبطه على أنّه عام. القيم الكاملة العامة الثلاثة هي:

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

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

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

CustomInputEvent وCar Input API

InputHalService هي خدمة Car التي تتلقّى HW_CUSTOM_INPUT واردًا من Vehicle HAL.

تعمل فئة InputHalService على تحويل HW_CUSTOM_INPUT الواردة إلى CustomInputEvent، وهي فئة قابلة للتقسيم بلغة Java وتقع فيملف car-lib/src/android/car/input، بالإضافة إلى واجهة aidl ذات الصلة.

CarInputService هي خدمة أساسية لخدمة "إدخال السيارة"، وهي تتلقّى رسائل برمجية واردة من ملف برمجي CustomInputEvents، ثم ترسلها إلى أي خدمة مسجّلة لنظام Android.

لتسجيل أحداث CustomInputEvents الواردة وتلقّيها، يجب أن تستوفي خدمات النظام الشروط التالية:

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

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

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

توفّر المصنّعون الأصليون للأجهزة خدمة نظام Android الخاصة بهم لمعالجة رسائل CarInputService القادمة من CarInputService.

إنّ الخدمات التي تم وضع علامة عليها باستخدام إذن امتياز android.permission.INJECT_EVENTS فقط هي التي يمكنها تسجيل أحداث CustomInputEvents واستلامها من Car Input API (CarInputManager). لا يمكن تسجيل أي خدمة أو تطبيق تابعَين لجهة خارجية باستخدام إذن نظام Android هذا (خدمات المصنّعين الأصليّين للأجهزة فقط). وبالتالي، لا يمكن لأي خدمة أو تطبيق تابعَين لجهة خارجية التسجيل ضد Car Input API.

يمكن لخدمات نظام Android لدى المصنّعين الأصليّين للأجهزة الوصول إلى SystemApi والطُرق المتاحة للجميع.

التنفيذ المرجعي

اطّلِع على عملية التنفيذ المرجعية في ملف packages/services/Car/tests/SampleCustomInputService، والذي يتم تقديمه كمثال وإرشاد. على سبيل المثال، لإضافة زر جديد في وحدة التحكّم في عجلة القيادة. عند الضغط على هذا الزر الجديد، يتم تشغيل تطبيق الخرائط مع عرض الموقع الجغرافي الحالي للسيارة.

في هذا المثال، اختار المصنّع الأصلي للسيارة INPUT_CODE_F1 (أول CustomInputEvent دالة راحة) لتمثيل هذه الميزة الجديدة (فتح تطبيق "خرائط Google" باستخدام الموقع الجغرافي الحالي للسيارة).

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

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