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

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

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

HW_CUSTOM_INPUT

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

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

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

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

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

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

CustomInputEvent وواجهة برمجة تطبيقات إدخال السيارة

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_أحداث تسجيلها وتلقّي الأحداث المخصّصة من واجهة برمجة تطبيقات إدخال السيارة (CarInputManager). لا يمكن تسجيل أي خدمة أو تطبيق تابعَين لجهة خارجية باستخدام إذن نظام Android هذا (خدمات المصنّعين الأصليّين للأجهزة فقط). وبالتالي، لا يمكن لأي خدمة أو تطبيق تابعَين لجهة خارجية التسجيل ضد Car Input API.

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

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

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

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

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

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