อินพุตที่กำหนดเองของ OEM

ใช้อินพุตที่กำหนดเองของ 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 ) จำนวนเต็มทั่วไปสามค่าคือ:

  1. องค์ประกอบแรกแสดงถึงรหัสอินพุตที่ OEM กำหนด คุณสามารถเชื่อมโยงความหมายใดๆ เข้ากับโค้ดอินพุตได้

  2. องค์ประกอบที่สองจัดเก็บการแสดงผลเป้าหมาย เช่น จอแสดงผลหลักหรือคลัสเตอร์

  3. องค์ประกอบที่สามประกอบด้วยจำนวนครั้งที่เหตุการณ์เกิดขึ้นซ้ำ เช่น เพื่อระบุจำนวนครั้งที่กดปุ่ม

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 ขาเข้า บริการระบบจะต้อง:

แผนภาพต่อไปนี้แสดงขั้นตอนการทำงานของเหตุการณ์อินพุตแบบกำหนดเองของ OEM

เวิร์กโฟลว์อินพุตที่กำหนดเองของ 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