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