ใช้ข้อมูลที่กำหนดเองของ OEM เพื่อเพิ่มเหตุการณ์อินพุตของรถยนต์ใหม่สำหรับฟีเจอร์ Android ใหม่และที่ไม่เป็นไปตามมาตรฐาน
เหตุการณ์อินพุตที่ไม่เป็นไปตามมาตรฐานจะไม่ได้รับการแมปโดย KeyEvent
ของ Android ที่มีอยู่ ซึ่งออกแบบมาให้เป็นแบบทั่วไปและทำงานบนพื้นผิว Android ใดก็ได้
แต่ไม่ได้ขยายเพื่อใช้ฟีเจอร์เฉพาะของ OEM ตัวอย่างเช่น ปุ่ม
ที่อยู่บนตัวควบคุมพวงมาลัย ซึ่งเมื่อกดแล้วจะเปิดแอปแผนที่
(ผ่าน Intent) พร้อมตำแหน่งปัจจุบันของรถ ฟีเจอร์นี้ช่วยให้
ผู้ขับเห็นภาพตำแหน่งปัจจุบันได้โดยไม่เสียสมาธิขณะ
ขับรถ
บทความนี้อธิบายวิธีใช้ KeyEvent
Android ที่มีอยู่ซ้ำเพื่อ
สร้าง CustomInputEvent
สำหรับใช้เฉพาะในกรณีที่ไม่สามารถใช้ KeyEvent
Android เพื่อแสดงฟีเจอร์ได้
HW_CUSTOM_INPUT
อินพุตที่กำหนดเองของ OEM แสดงด้วย HW_CUSTOM_INPUT และ
CustomInputEvent.java HW_CUSTOM_INPUT คือ
เหตุการณ์ดั้งเดิมที่สร้างขึ้นโดยฮาร์ดแวร์ของรถยนต์ (HAL ยานพาหนะ) OEM จะเป็นผู้กำหนด
วิธีสร้างอินสแตนซ์ของเหตุการณ์นี้ การเข้าถึง HW_CUSTOM_INPUT จะ
ตั้งค่าเป็น [อ่านอย่างเดียว] โดยมี VehiclePropertyAccess:READ
เพื่อให้มั่นใจว่า Vehicle HAL จะออกอากาศค่าล่าสุดที่มีอยู่ได้เสมอ เราจึงตั้งค่าการแจ้งเตือน HW_CUSTOM_INPUT เป็น ON_CHANGE
โดยมี
VehiclePropertyChangeMode:ON_CHANGE
ค่า HW_CUSTOM_INPUT ประกอบด้วยอาร์เรย์ของค่าทั่วไป
int32
ซึ่งตั้งค่าเป็น GLOBAL
(มี VehicleArea:GLOBAL
) จำนวนเต็มทั่วไป 3 รายการมีดังนี้
องค์ประกอบแรกแสดงถึงรหัสอินพุตที่ OEM จะกำหนด คุณเชื่อมโยงความหมายใดก็ได้กับโค้ดอินพุต
องค์ประกอบที่ 2 จะจัดเก็บจอแสดงผลเป้าหมาย เช่น จอแสดงผลหลัก หรือคลัสเตอร์
องค์ประกอบที่ 3 มีจํานวนครั้งที่เหตุการณ์ซ้ำ เช่น เพื่อระบุจำนวนครั้งที่มีการกดปุ่ม
CustomInputEvent และ Car Input API
InputHalService คือบริการของรถยนต์ที่รับ HW_CUSTOM_INPUT
ขาเข้าจาก Vehicle HAL
InputHalService จะแปลง HW_CUSTOM_INPUT
ที่เข้ามาเป็น CustomInputEvent
ซึ่งเป็นคลาส parcelable ของ Java ที่อยู่ใน car-lib/src/android/car/input พร้อมกับอินเทอร์เฟซ AIDL ที่เกี่ยวข้อง
CarInputService ซึ่งเป็นบริการป้อนข้อมูลของรถยนต์หลักจะรับ CustomInputEvents ที่เข้ามา แล้วส่งไปยังบริการของระบบ Android ที่ลงทะเบียนไว้
หากต้องการลงทะเบียนและรับ CustomInputEvents ขาเข้า บริการของระบบต้องดำเนินการต่อไปนี้
ลงทะเบียนผ่าน CarInputManager#requestInputEventCapture โดยส่ง
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
เป็นพารามิเตอร์ประเภทอินพุตหากต้องการยกเลิกการลงทะเบียน บริการต้องเรียกใช้ CarInputManager#releaseInputEventCapture
แผนภาพต่อไปนี้แสดงเวิร์กโฟลว์ของเหตุการณ์อินพุตที่กำหนดเองของ OEM
บริการระบบ Android ของ OEM
OEM ให้บริการระบบ Android เพื่อจัดการ CustomInputEvents ที่เข้ามาจาก CarInputService
เฉพาะบริการที่มีเครื่องหมาย android.permission.INJECT_EVENTS สิทธิ์พิเศษ เท่านั้นที่สามารถลงทะเบียนและรับ CustomInputEvents จาก Car Input API (CarInputManager) ไม่มีบริการหรือแอปพลิเคชันของบุคคลที่สามใดที่สามารถ ลงนามด้วยสิทธิ์ของระบบ Android นี้ได้ (เฉพาะบริการของ OEM) ดังนั้นจึงไม่มีบริการหรือแอปพลิเคชันของบุคคลที่สามใดๆ ที่จะลงทะเบียนกับ Car Input API ได้
บริการของระบบ Android ของ OEM สามารถเข้าถึง SystemApi
และเมธอดสาธารณะได้
การใช้งานอ้างอิง
ดูการใช้งานอ้างอิงได้ที่ packages/services/Car/tests/SampleCustomInputService ซึ่ง มีไว้เป็นตัวอย่างและหลักเกณฑ์ เช่น หากต้องการเพิ่มปุ่มใหม่ ในตัวควบคุมพวงมาลัย เมื่อกดปุ่มใหม่นี้ ระบบจะเริ่ม แอป Maps โดยใช้ตำแหน่งปัจจุบันของรถ
ในตัวอย่างนี้ OEM เลือก INPUT_CODE_F1
(CustomInputEvent
ฟังก์ชันอำนวยความสะดวกแรก) เพื่อแสดงฟีเจอร์ใหม่นี้ (เปิดแอป Maps พร้อม
ตำแหน่งรถยนต์ปัจจุบัน)
ในระหว่างการเริ่มต้น บริการนี้จะลงทะเบียนตัวเองกับ CarInputManager
ผ่าน requestInputEventCapture
(ดูรหัสการลงทะเบียนการใช้งานอ้างอิง)
เมื่อได้รับ CustomInputEvents ขาเข้า บริการนี้จะส่ง Intent เพื่อเริ่มแอป Maps ดูวิธีดำเนินการนี้ได้ที่ CustomInputEventListener.java