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

ใช้ข้อมูลที่กำหนดเองของ 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 รายการมีดังนี้

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

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

  3. องค์ประกอบที่ 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 ขาเข้า บริการระบบต้องดำเนินการดังนี้

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

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