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

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

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

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