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 phương thức nhập tuỳ chỉnh của OEM để thêm các sự kiện nhập mới cho ô tô cho các tính năng Android mới và không chuẩn. Các sự kiện đầu vào không chuẩn không được ánh xạ bằng KeyEvent Android hiện có, được thiết kế để chung chung và hoạt động trên mọi nền tảng 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 vào nút này, ứng dụng bản đồ sẽ mở ra (thông qua một ý đị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 Android hiện có để tạo CustomInputEvent chỉ sử dụng khi không thể sử dụng KeyEvent Android để biểu thị tính năng.

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 tạo bản sao bởi phần cứng ô tô (Vehicle HAL). Nhà sản xuất thiết bị gốc (OEM) xác định cách tạo bản sao của sự kiện này. Quyền truy cập vào HW_CUSTOM_INPUT được đặt thành [chỉ đọc] bằng VehiclePropertyAccess:READ.

Để đảm bảo HAL của xe 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 int32 chung, được đặt là toàn cục. Ba số nguyên chung là:

  1. Phần tử đầu tiên đại diện cho 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 mục tiêu, 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 nhấn nút.

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

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 có thể phân đoạn 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 (Nhập trên ô tô) cốt lõi, sẽ nhận CustomInputEvents sắp tới rồi gửi các sự kiện đó đến bất kỳ dịch vụ hệ thống Android nào đã đăng ký.

Để đăng ký và nhận CustomInputEvents sắp tới, 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 dữ liệu tuỳ chỉnh của OEM

Dịch vụ hệ thống Android của nhà sản xuất thiết bị gốc (OEM)

Nhà sản xuất thiết bị gốc (OEM) cung cấp dịch vụ hệ thống Android để 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ừ API Đầu vào ô 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 này của hệ thống Android (chỉ dành cho 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 ô tô.

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

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

Trong ví dụ này, nhà sản xuất thiết bị gốc đã 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 đồ bằng vị trí xe hiện tại).

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 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.