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