קלט מותאם אישית של יצרני ציוד מקורי

אפשר להשתמש בקלט מותאם אישית של יצרן ציוד מקורי (OEM) כדי להוסיף אירועי קלט חדשים לרכב עבור תכונות חדשות ולא סטנדרטיות של Android. אירועי קלט לא סטנדרטיים לא ממופים על ידי Android KeyEvent הקיים, שמיועד להיות כללי ולפעול בכל ממשק של Android, אבל לא מורחב כדי ליישם תכונות ספציפיות ליצרן ציוד מקורי (OEM). לדוגמה, לחצן שנמצא על בקר ההגה, שכשלוחצים עליו נפתחת אפליקציית מפות (באמצעות intent) עם המיקום הנוכחי של הרכב. התכונה הזו מאפשרת לנהגים לראות את המיקום הנוכחי שלהם בלי להסיח את דעתם בזמן הנהיגה.

במאמר הזה מוסבר איך לעשות שימוש חוזר ב-KeyEvent קיים ב-Android כדי ליצור CustomInputEvent לשימוש רק כשאי אפשר להשתמש ב-KeyEvent ב-Android כדי לייצג את התכונה.

HW_CUSTOM_INPUT

קלט מותאם אישית של OEM מיוצג על ידי HW_CUSTOM_INPUT ו-CustomInputEvent.java. ‫HW_CUSTOM_INPUT הוא האירוע המקורי, שנוצר על ידי רכיבי החומרה של הרכב (Vehicle HAL). יצרני ציוד מקורי (OEM) קובעים איך ליצור מופע של האירוע הזה. הגישה אל 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 and Car Input API

InputHalService הוא שירות הרכב שמקבל HW_CUSTOM_INPUT נכנס מ-Vehicle HAL.

InputHalService ממיר את HW_CUSTOM_INPUT הנכנס ל-CustomInputEvent, מחלקה של Java parcelable שנמצאת ב-car-lib/src/android/car/input, יחד עם ממשק ה-aidl המתאים.

CarInputService, שירות קלט ליבה לרכב, מקבל CustomInputEvents נכנסים ואז שולח אותם לכל שירות מערכת רשום של Android.

כדי לרשום ולקבל אירועי CustomInputEvent נכנסים, שירותי המערכת צריכים:

בתרשים הבא מודגם תהליך העבודה של אירוע קלט בהתאמה אישית של יצרן ציוד מקורי.

תהליך עבודה של קלט מותאם אישית ב-OEM

שירותי מערכת Android של יצרן ציוד מקורי (OEM)

יצרני ציוד מקורי (OEM) מספקים את שירות מערכת Android שלהם כדי לטפל ב-CustomInputEvents שמגיעים מ-CarInputService.

רק שירותים שמסומנים בהרשאת הפריבילגיה android.permission.INJECT_EVENTS יכולים להירשם ולקבל CustomInputEvents מממשק Car Input API‏ (CarInputManager). אף אפליקציה או שירות של צד שלישי לא יכולים להיחתם באמצעות הרשאת מערכת Android הזו (רק שירותי OEM). לכן, אף אפליקציה או שירות של צד שלישי לא יכולים להירשם ל-Car Input API.

שירותי מערכת Android של יצרן ציוד מקורי יכולים לגשת אל SystemApi ואל שיטות ציבוריות.

הטמעה לדוגמה

אפשר לראות את יישום ההפניה ב-packages/services/Car/tests/SampleCustomInputService, שמסופק כדוגמה וכקו מנחה. לדוגמה, כדי להוסיף לחצן חדש לבקרה של ההגה. כשלוחצים על הכפתור החדש הזה, אפליקציית המפות מתחילה לפעול עם המיקום הנוכחי של הרכב.

בדוגמה הזו, יצרן הציוד המקורי בחר באפשרות INPUT_CODE_F1 (הפונקציה הראשונה CustomInputEvent לנוחות השימוש) כדי לייצג את התכונה החדשה הזו (פתיחת אפליקציית המפות עם המיקום הנוכחי של הרכב).

במהלך ההפעלה, השירות הזה נרשם ב-CarInputManager דרך requestInputEventCapture (אפשר לעיין בקוד הרישום של יישום ההפניה).

כשמתקבלים אירועי CustomInputEvent נכנסים, השירות הזה שולח את הכוונה להפעיל את אפליקציית המפות. כדי להבין איך זה קורה, אפשר לעיין ב-CustomInputEventListener.java.