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

ใช้อินพุตที่กำหนดเองของ OEM เพื่อเพิ่มเหตุการณ์อินพุตรถยนต์ใหม่สำหรับฟีเจอร์ Android ใหม่และที่ไม่ใช่มาตรฐาน Android KeyEvent ที่มีอยู่ไม่ได้แมปเหตุการณ์อินพุตที่ไม่ใช่มาตรฐาน เนื่องจากออกแบบมาให้เป็นแบบทั่วไปและใช้งานได้กับแพลตฟอร์ม Android ทุกรุ่น แต่ไม่ได้ขยายการให้บริการเพื่อใช้ฟีเจอร์เฉพาะของ OEM ตัวอย่างเช่น ปุ่ม ที่อยู่บนตัวควบคุมพวงมาลัย ซึ่งเมื่อกดจะเป็นการเปิดแอปแผนที่ (ผ่านความตั้งใจ) ที่มีตำแหน่งปัจจุบันของรถ ฟีเจอร์นี้ช่วยให้ผู้ขับขี่เห็นภาพตำแหน่งปัจจุบันของตนได้โดยไม่ต้องเสียสมาธิขณะขับรถ

บทความนี้อธิบายวิธีนํา KeyEvent ของ Android ที่มีอยู่มาใช้ซ้ำเพื่อสร้าง CustomInputEvent เพื่อใช้เฉพาะในกรณีที่ใช้ KeyEvent ของ Android เพื่อแสดงฟีเจอร์ไม่ได้

HW_CUSTOM_INPUT

อินพุตที่กำหนดเองของ OEM จะแสดงด้วย HW_CUSTOM_INPUT และ CustomInputEvent.java HW_CUSTOM_INPUT คือเหตุการณ์เนทีฟที่สร้างขึ้นโดยฮาร์ดแวร์ของรถยนต์ (HAL ยานพาหนะ) OEM จะเป็นผู้กำหนดวิธีสร้างอินสแตนซ์เหตุการณ์นี้ การเข้าถึง HW_CUSTOM_INPUT มีการตั้งค่าเป็น [อ่านอย่างเดียว] ด้วย VehiclePropertyAccess:READ

เพื่อให้ HAL ของยานพาหนะเผยแพร่ค่าล่าสุดที่มีได้เสมอ ระบบจะตั้งค่าการแจ้งเตือนHW_CUSTOM_INPUT เป็น ON_CHANGE พร้อมด้วย VehiclePropertyChangeMode:ON_CHANGE

ค่า HW_CUSTOM_INPUT ประกอบด้วยอาร์เรย์ของ int32 ทั่วไปที่ตั้งค่าเป็น global จำนวนเต็มทั่วไป 3 รายการ ได้แก่

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

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

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

CustomInputEvent และ Car Input API

InputHalService คือบริการรถยนต์ที่รับ HW_CUSTOM_INPUT จาก HAL ของยานพาหนะ

InputHalService จะแปลง HW_CUSTOM_INPUT ที่เข้ามาเป็น CustomInputEvent ซึ่งเป็นคลาส Parcelable ของ Java ที่อยู่ใน car-lib/src/android/car/input พร้อมกับอินเทอร์เฟซ AIDL ที่เกี่ยวข้อง

CarInputService ซึ่งเป็นบริการป้อนข้อมูลหลักของรถยนต์จะรับเหตุการณ์ CustomInputEvents ที่เข้ามาใหม่และส่งไปยังบริการระบบ Android ที่ลงทะเบียนทั้งหมด

หากต้องการลงทะเบียนและรับ CustomInputEvents ที่เข้ามา บริการของระบบต้องทำดังนี้

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

เวิร์กโฟลว์อินพุตที่กำหนดเองของ 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 รายการแรก) เพื่อแสดงฟีเจอร์ใหม่นี้ (การเปิดแอปแผนที่ด้วยตำแหน่งของรถปัจจุบัน)

ในระหว่างการเริ่มต้นระบบ บริการนี้จะลงทะเบียนกับ CarInputManager ผ่าน requestInputEventCapture (ดูรหัสการลงทะเบียนการใช้งานอ้างอิง

เมื่อได้รับ CustomInputEvents ขาเข้า บริการนี้จะส่ง Intent เพื่อเริ่มแอป Maps ดูวิธีดำเนินการได้ที่ CustomInputEventListener.java