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

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

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

HW_CUSTOM_INPUT

קלט מותאם אישית של OEM מיוצג על ידי HW_CUSTOM_INPUT ו-CustomInputEvent.java. HW_CUSTOM_INPUT הוא האירוע המקורי שנוצר על ידי חומרת הרכב (Vehicle HAL). יצרני ציוד מקורי קובעים איך ליצור מופע של האירוע הזה. הגישה ל-HW_CUSTOM_INPUT מוגדרת כ'קריאה בלבד', עם VehiclePropertyAccess:READ.

כדי לוודא ש-HAL הרכב תמיד יוכל לשדר את הערך העדכני ביותר שזמין, ההתראה HW_CUSTOM_INPUT מוגדרת כ-ON_CHANGE, עם VehiclePropertyChangeMode:ON_CHANGE.

הערכים של HW_CUSTOM_INPUT מורכבים מערך של int32 גנרי, שמוגדר כ-global. שלושת המספרים השלמים הכלליים הם:

  1. הרכיב הראשון מייצג את קוד הקלט שיוגדר על ידי יצרן הציוד המקורי. אפשר לשייך לכל קוד קלט סמנטיקה.

  2. הרכיב השני מאחסן את מסך היעד, כמו המסך הראשי או האשכולות.

  3. הרכיב השלישי מכיל את מספר הפעמים שהאירוע חזר על עצמו. לדוגמה, כדי לציין כמה פעמים לחצן נלחץ.

CustomInputEvent ו-Car Input API

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

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

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

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

בתרשים הבא מודגם תהליך העבודה של אירוע OEM Custom Input.

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

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

יצרני ציוד מקורי מספקים את שירות המערכת של 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 (ראו קוד הרישום של ההטמעה לדוגמה).

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