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

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

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

HW_CUSTOM_INPUT

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

لضمان إمكانية بث أحدث قيمة متاحة من خلال طبقة تجريد الأجهزة في المركبة دائمًا، يتم ضبط الإشعار 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 واردًا من طبقة تجريد الأجهزة في المركبة.

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

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

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