Dữ liệu đầu vào tuỳ chỉnh của nhà sản xuất thiết bị gốc (OEM)

Sử dụng dữ liệu đầu vào tuỳ chỉnh của OEM để thêm các Sự kiện đầu vào mới cho ô tô cho các tính năng mới và không chuẩn của Android. Các sự kiện đầu vào không chuẩn không được ánh xạ bởi KeyEvent hiện có của Android, được thiết kế để chung chung và hoạt động trên mọi giao diện Android nhưng không được mở rộng để triển khai các tính năng dành riêng cho OEM. Ví dụ: một nút nằm trên bộ điều khiển vô lăng, khi nhấn sẽ mở một ứng dụng bản đồ (thông qua ý định) với vị trí hiện tại của ô tô. Tính năng này cho phép người lái xe hình dung vị trí hiện tại của họ mà không bị phân tâm khi lái xe.

Bài viết này mô tả cách sử dụng lại KeyEvent hiện có của Android để tạo CustomInputEvent chỉ dùng khi không thể sử dụng KeyEvent của Android để biểu thị tính năng này.

HW_CUSTOM_INPUT

Dữ liệu đầu vào tuỳ chỉnh của OEM được biểu thị bằng HW_CUSTOM_INPUTCustomInputEvent.java. HW_CUSTOM_INPUT là sự kiện gốc, được thực thể hoá bởi phần cứng ô tô (Vehicle HAL). OEM xác định cách thực thể hoá sự kiện này. Quyền truy cập vào HW_CUSTOM_INPUT được đặt là [chỉ đọc], với VehiclePropertyAccess:READ.

Để đảm bảo Vehicle HAL luôn có thể truyền giá trị mới nhất hiện có, thông báo HW_CUSTOM_INPUT được đặt là ON_CHANGE, với VehiclePropertyChangeMode:ON_CHANGE.

Các giá trị HW_CUSTOM_INPUT bao gồm một mảng int32 chung, được đặt là GLOBAL (với VehicleArea:GLOBAL). Ba số nguyên chung là:

  1. Phần tử đầu tiên biểu thị mã đầu vào do OEM xác định. Bạn có thể liên kết bất kỳ ngữ nghĩa nào với mã đầu vào.

  2. Phần tử thứ hai lưu trữ màn hình đích, chẳng hạn như màn hình chính hoặc cụm đồng hồ.

  3. Phần tử thứ ba chứa số lần sự kiện được lặp lại. Ví dụ: để cho biết số lần một nút được nhấn.

CustomInputEvent và API đầu vào cho ô tô

InputHalService là dịch vụ Ô tô nhận HW_CUSTOM_INPUT đến từ Vehicle HAL.

InputHalService chuyển đổi HW_CUSTOM_INPUT đến thành CustomInputEvent, một lớp Java có thể phân tích cú pháp nằm trong car-lib/src/android/car/input, cùng với giao diện aidl tương ứng.

CarInputService, một dịch vụ Đầu vào cho ô tô cốt lõi, nhận các CustomInputEvent đến rồi gửi chúng đến mọi dịch vụ hệ thống Android đã đăng ký.

Để đăng ký và nhận các CustomInputEvent đến, các dịch vụ hệ thống phải:

Sơ đồ sau đây minh hoạ quy trình công việc của một sự kiện Đầu vào tuỳ chỉnh của OEM.

Quy trình nhập tuỳ chỉnh của nhà sản xuất thiết bị gốc

Các dịch vụ hệ thống Android của OEM

OEM cung cấp dịch vụ hệ thống Android để xử lý các CustomInputEvent đến từ CarInputService.

Chỉ những dịch vụ được đánh dấu bằng quyền đặc quyền android.permission.INJECT_EVENTS mới có thể đăng ký và nhận CustomInputEvent từ API đầu vào cho ô tô (CarInputManager). Không có dịch vụ hoặc ứng dụng bên thứ ba nào có thể được ký bằng quyền hệ thống Android này (chỉ các dịch vụ OEM). Do đó, không có dịch vụ hoặc ứng dụng bên thứ ba nào có thể đăng ký với API đầu vào cho ô tô.

Các dịch vụ hệ thống Android của OEM có thể truy cập vào SystemApi và các phương thức công khai.

Triển khai tham chiếu

Hãy xem cách triển khai tham chiếu trong packages/services/Car/tests/SampleCustomInputService, được cung cấp làm ví dụ và hướng dẫn. Ví dụ: để thêm một nút mới vào bộ điều khiển vô lăng. Khi nhấn, nút mới này sẽ khởi động ứng dụng bản đồ với vị trí hiện tại của ô tô.

Trong ví dụ này, OEM đã chọn INPUT_CODE_F1 (hàm tiện lợi CustomInputEvent đầu tiên) để biểu thị tính năng mới này (mở ứng dụng bản đồ với vị trí hiện tại của ô tô).

Trong quá trình khởi động, dịch vụ này tự đăng ký với CarInputManager thông qua requestInputEventCapture (xem mã đăng ký triển khai tham chiếu.

Khi nhận các CustomInputEvent đến, dịch vụ này sẽ gửi ý định khởi động ứng dụng bản đồ. Để tìm hiểu cách thực hiện việc này, hãy xem CustomInputEventListener.java.