ใช้อินพุตที่กำหนดเองของ OEM เพื่อเพิ่มเหตุการณ์อินพุตรถยนต์ใหม่สำหรับฟีเจอร์ Android ใหม่และที่ไม่ได้มาตรฐาน เหตุการณ์อินพุตที่ไม่เป็นมาตรฐานจะไม่ถูกแมปโดย Android KeyEvent
ที่มีอยู่ ซึ่งออกแบบมาให้เป็นแบบทั่วไปและทำงานบนพื้นผิว Android ใดก็ได้ แต่ไม่ได้ขยายให้ใช้ฟีเจอร์เฉพาะของ OEM ตัวอย่างเช่น ปุ่มที่อยู่บนตัวควบคุมพวงมาลัยซึ่งเมื่อกดแล้วจะเป็นการเปิดแอปแผนที่ (ผ่านเจตนา) พร้อมตำแหน่งปัจจุบันของรถ คุณสมบัตินี้ช่วยให้ผู้ขับขี่เห็นภาพตำแหน่งปัจจุบันของตนโดยไม่เสียสมาธิขณะขับรถ
บทความนี้อธิบายวิธีนำ Android KeyEvent
ที่มีอยู่กลับมาใช้ใหม่เพื่อสร้าง CustomInputEvent
เพื่อ ใช้ งานเมื่อไม่สามารถใช้ Android KeyEvent
เพื่อแสดงคุณลักษณะนี้ได้
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]{:.external} (โดยมี VehicleArea:GLOBAL
) จำนวนเต็มทั่วไปสามค่าคือ:
องค์ประกอบแรกแสดงถึงรหัสอินพุตที่ OEM กำหนด คุณสามารถเชื่อมโยงความหมายใดๆ เข้ากับโค้ดอินพุตได้
องค์ประกอบที่สองจัดเก็บการแสดงผลเป้าหมาย เช่น จอแสดงผลหลักหรือคลัสเตอร์
องค์ประกอบที่สามประกอบด้วยจำนวนครั้งที่เหตุการณ์เกิดขึ้นซ้ำ เช่น เพื่อระบุจำนวนครั้งที่กดปุ่ม
CustomInputEvent และ Car Input API
InputHalService คือบริการรถยนต์ที่ได้รับ HW_CUSTOM_INPUT
ขาเข้าจาก Vehicle HAL
InputHalService แปลง HW_CUSTOM_INPUT
ขาเข้าให้เป็น CustomInputEvent
ซึ่งเป็นคลาส Java ที่แบ่งแยกได้ ซึ่งอยู่ใน car-lib/src/android/car/input พร้อมด้วย อินเทอร์เฟซ Aidl ที่เกี่ยวข้อง
CarInputService ซึ่งเป็นบริการป้อนข้อมูลในรถยนต์หลัก รับ CustomInputEvents ขาเข้าแล้วส่งไปยังบริการระบบ Android ที่ลงทะเบียนไว้
หากต้องการลงทะเบียนและรับ CustomInputEvents ขาเข้า บริการระบบจะต้อง:
ลงทะเบียนผ่าน CarInputManager#requestInputEventCapture โดยส่ง
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
เป็นพารามิเตอร์ประเภทอินพุตหากต้องการยกเลิกการลงทะเบียน บริการจะต้องเรียกใช้ CarInputManager#releaseInputEventCapture
แผนภาพต่อไปนี้แสดงขั้นตอนการทำงานของเหตุการณ์อินพุตแบบกำหนดเองของ OEM
บริการระบบ OEM Android
OEM ให้บริการระบบ Android เพื่อจัดการ CustomInputEvents ขาเข้าจาก CarInputService
เฉพาะบริการเหล่านั้นที่ทำเครื่องหมายด้วยสิทธิ์พิเศษ android.permission.INJECT_EVENTS เท่านั้นที่สามารถลงทะเบียนและรับ CustomInputEvents จาก Car Input API ( CarInputManager ) ไม่สามารถลงนามบริการหรือแอปพลิเคชันของบุคคลที่สามด้วยการอนุญาตระบบ Android นี้ (เฉพาะบริการ OEM) ดังนั้นจึงไม่มีบริการหรือแอปพลิเคชันของบุคคลที่สามใดที่สามารถลงทะเบียนกับ Car Input API ได้
บริการระบบ OEM Android สามารถเข้าถึง SystemApi
และวิธีการสาธารณะ
การดำเนินการอ้างอิง
ดูการใช้งานอ้างอิงใน packages/services/Car/tests/SampleCustomInputService ซึ่งมีให้ไว้เป็นตัวอย่างและแนวทาง เช่น เพิ่มปุ่มใหม่ในการควบคุมพวงมาลัย เมื่อกด ปุ่มใหม่นี้จะเริ่มต้นแอพแผนที่พร้อมตำแหน่งของรถปัจจุบัน
ในตัวอย่างนี้ OEM เลือก INPUT_CODE_F1
(ฟังก์ชันอำนวยความสะดวก CustomInputEvent
แรก) เพื่อแสดงคุณลักษณะใหม่นี้ (การเปิดแอปแผนที่ด้วยตำแหน่งของรถปัจจุบัน)
ในระหว่างการเริ่มต้น บริการนี้จะลงทะเบียนตัวเองกับ CarInputManager
ผ่าน requestInputEventCapture
(ดู รหัสการลงทะเบียนการใช้งานอ้างอิง
เมื่อได้รับ CustomInputEvents ขาเข้า บริการนี้จะส่งความตั้งใจในการเริ่มแอป Maps หากต้องการเรียนรู้วิธีดำเนินการนี้ โปรดดูที่ CustomInputEventListener.java