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 các chế độ cài đặt đầu vào tuỳ chỉnh của OEM để thêm các sự kiện đầu vào mới cho Xe 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 theo tiêu chuẩn không được KeyEvent Android hiện có ánh xạ. KeyEvent này được thiết kế để có tính 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 được nhấn, sẽ mở một ứng dụng bản đồ (thông qua một ý định) với vị trí hiện tại của ô tô. Tính năng này giúp người lái xe hình dung được vị trí hiện tại 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 KeyEvent hiện có trên Android để tạo CustomInputEvent chỉ được dùng khi không thể dùng KeyEvent trên Android để biểu thị tính năng này.

HW_CUSTOM_INPUT

Đầ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 tạo thực thể bằng phần cứng ô tô (HAL phương tiện). OEM xác định cách khởi tạo sự kiện này. Quyền truy cập vào HW_CUSTOM_INPUT được đặt thành [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 thành ON_CHANGE, với VehiclePropertyChangeMode:ON_CHANGE.

Các giá trị HW_CUSTOM_INPUT bao gồm một mảng chung int32, được đặt làm 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à Car Input API

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

InputHalService chuyển đổi HW_CUSTOM_INPUT đến thành CustomInputEvent, một lớp parcelable Java 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ụ Car Input cốt lõi, nhận CustomInputEvents đến rồi gửi chúng đến mọi dịch vụ hệ thống Android đã đăng ký.

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

Sơ đồ sau đây minh hoạ quy trình làm 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 (OEM)

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

Các OEM cung cấp dịch vụ hệ thống Android của họ để xử lý CustomInputEvents đế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 CustomInputEvents từ Car Input API (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 này của hệ thống Android (chỉ các dịch vụ của 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 Car Input API.

Các dịch vụ hệ thống Android của Nhà sản xuất thiết bị gốc (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. Đây là một ví dụ và hướng dẫn. Ví dụ: để thêm một nút mới vào nút điều khiển trên vô lăng. Khi được nhấn, nút mới này sẽ khởi động ứng dụng Maps 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 ích CustomInputEvent đầu tiên) để biểu thị tính năng mới này (mở ứng dụng bản đồ bằng vị trí hiện tại của ô tô).

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

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