שימוש בערכי קלט מותאמים אישית של ה-OEM כדי להוסיף אירועי קלט חדשים של רכבים חדשים ולא סטנדרטיים
תכונות ב-Android. אירועי קלט שאינם סטנדרטיים לא ממופים על ידי
Android KeyEvent
, האפליקציה מיועדת להיות כללית ולעבוד בכל פלטפורמה של Android
אבל היא לא מורחבת ליישום תכונות ספציפיות ל-OEM. לדוגמה, לחצן
נמצא על מתג ההגה, ובלחיצה עליו תיפתח אפליקציית מפות
(דרך Intent) עם המיקום הנוכחי של הרכב. התכונה הזו מאפשרת
נהגים כדי לראות את המיקום הנוכחי שלהם בלי שדעתם תיסחף
נהיגה.
במאמר הזה מוסבר איך לעשות שימוש חוזר במכשיר Android קיים KeyEvent
כדי
ליצור CustomInputEvent
לשימוש בלבד כשאין אפשרות ל-KeyEvent
Android
לייצוג התכונה.
HW_CUSTOM_INPUT
קלט מותאם אישית של OEM מיוצג על ידי 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
, מוגדר כ[גלובלי]{:.external} (עם VehicleArea:GLOBAL
) שלוש האפשרויות
מספרים שלמים כלליים הם:
הרכיב הראשון מייצג את קוד הקלט שיש להגדיר על ידי ה-OEM. ניתן לשייך כל סמנטי לקוד הקלט.
הרכיב השני שומר את תצוגת היעד, כמו המסך הראשי או אשכול.
הרכיב השלישי מכיל את מספר הפעמים שהאירוע חוזר. לדוגמה, כדי לציין כמה פעמים בוצעה לחיצה על לחצן.
CustomInputEvent ו-API לקלט רכב
InputHalService הוא שירות הרכב שמקבל
HW_CUSTOM_INPUT
מגרסת ה-HAL של הרכב.
InputHalService ממיר את הערך של HW_CUSTOM_INPUT
הנכנס ל:
את CustomInputEvent
, מחלקה parcelable של Java שנמצאת ב-
car-lib/src/android/car/input, וגם
ממשק AIdl.
CarInputService, שירות ליבה לקלט של רכב, מקבל הודעות נכנסות CustomInputEvents ולאחר מכן שליחתם לכל שירות מערכת רשום של Android.
כדי לרשום ולקבל אירועים נכנסים של CustomInputEvents, שירותי המערכת חייבים:
מטמיעים את CarInputManager.CarInputCaptureCallback#onKeyEvents.
נרשמים דרך CarInputManager#requestInputEventCapture, העברת
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
בתור הקלט .כדי לבטל את הרישום, צריך להפעיל שירותים CarInputManager#releaseInputEventCapture.
בתרשים הבא אפשר לראות את תהליך העבודה של אירוע קלט מותאם אישית של יצרן ציוד מקורי.
שירותי מערכת Android של OEM (יצרן ציוד מקורי)
יצרני ציוד מקורי מספקים שירות מערכת Android כדי לטפל בפניות נכנסות
אירועים של קלט מותאם אישית מ-CarInputService
.
רק השירותים שמסומנים בסמל הרשאת הרשאה מסוג android.permission.INJECT_Events יכול לרשום ולקבל CustomInputEvents מ-Car קלט API (CarInputManager). אף שירות או אפליקציה של צד שלישי לא יכולים לחתום עם הרשאת מערכת Android זו (שירותי OEM בלבד). לכן, אף שירות או אפליקציה של צד שלישי לא יכולים להירשם מול ה-Car קלט API.
לשירותי מערכת Android של OEM (יצרן ציוד מקורי) יש גישה ל-SystemApi
ולשיטות ציבוריות.
הטמעת קובצי עזר
מידע על הטמעת קובץ העזר זמין packages/services/Car/tests/SampleCustomInputService, ביניהם הוא דוגמה וקו מנחה. לדוגמה, להוספת לחצן חדש בשליטת ההגה. כשלוחצים, הלחצן החדש מפעיל את מפות Google עם מיקום הרכב הנוכחי.
בדוגמה זו, ה-OEM (יצרן הציוד המקורי) בחר את INPUT_CODE_F1
(ה-CustomInputEvent
הראשון
פונקציה חדשה) כדי לייצג את התכונה החדשה הזו (פתיחה של אפליקציית מפות עם
מיקום הרכב הנוכחי).
במהלך ההפעלה, השירות הזה רושם את עצמו מול CarInputManager
דרך requestInputEventCapture
(ניתן לעיין
קוד הרישום להטמעת קובצי העזר.
בעת קבלת CustomInputEvents נכנסים, השירות הזה שולח את ה-Intent כדי להפעיל את אפליקציית מפות. כדי להבין איך עושים זאת, אפשר לעיין במאמר בנושא CustomInputEventListener.Java.