Đầu vào tuỳ chỉnh của 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 Ô tô mới cho dữ liệu mới và không theo tiêu chuẩn các tính năng của Android. Các sự kiện đầu vào không chuẩn không được ánh xạ theo Android KeyEvent, được thiết kế để dùng 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ảng điều khiển vô lăng và khi được nhấn, sẽ mở ra một ứng dụng bản đồ (thông qua một ý định) cùng 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 để trực quan hoá vị trí hiện tại của mình mà không bị phân tâm trong khi lái xe.

Bài viết này mô tả cách sử dụng lại KeyEvent hiện có trên Android để tạo CustomInputEvent để chỉ sử dụng khi không KeyEvent Android nào có thể được dùng để biểu thị đối tượng.

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 phần cứng ô tô tạo thực thể (HAL của xe). OEM xác định cách tạo thực thể cho sự kiện này. Quyền truy cập vào HW_CUSTOM_INPUT là đặt thành [chỉ đọc]{:.external}, với VehiclePropertyAccess:READ.

Để đảm bảo HAL của xe luôn có thể phát đi thông báo 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 thông số chung int32, đặt thành [global]{:.external} (với VehicleArea:GLOBAL) Ba là 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.

  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 dữ liệu đến HW_CUSTOM_INPUT từ HAL (Lớp trừu tượng phần cứng) cho xe.

InputHalService chuyển đổi HW_CUSTOM_INPUT đến thành CustomInputEvent, một lớp Java gói nằm trong car-lib/src/android/car/input cùng với các thẻ giao diện AIDL.

CarInputService, một dịch vụ chính dành cho ô tô, nhận tin nhắn đến CustomInputEvents rồi gửi chúng đến bất kỳ dịch vụ hệ thống Android nào đã đăng ký.

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

Sơ đồ dưới đây minh hoạ quy trình làm việc của một sự kiện Nhập tuỳ chỉnh của OEM.

Quy trình nhập dữ liệu tuỳ chỉnh của OEM (Nhà sản xuất thiết bị gốc)

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

OEM cung cấp dịch vụ hệ thống Android để xử lý thư đến CustomInputEvents qua CarInputService.

Chỉ những dịch vụ được đánh dấu bằng Quyền đặc quyền android.permission.INJECT_EVENTS có thể đăng ký và nhận CustomInputEvents từ Car Input API (CarInputManager). Không có ứng dụng hoặc dịch vụ 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ụ của Nhà sản xuất thiết bị gốc). Do đó, không dịch vụ hoặc ứng dụng nào của bên thứ ba có thể đăng ký dựa vào Car Input API.

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.

Cách triển khai tệp đối chiếu

Xem cách triển khai tham chiếu trong packages/services/Car/tests/SampleCustomInputService, trong đó sẽ được đưa ra làm ví dụ và hướng dẫn. Ví dụ: để thêm một nút mới trong phần đ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 đồ kèm theo vị trí hiện tại của ô tô.

Trong ví dụ này, OEM đã chọn INPUT_CODE_F1 (CustomInputEvent đầu tiên hàm tiện lợi) để 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 bản đồ. Để tìm hiểu cách thực hiện việc này, hãy xem CustomInputEventListener.java.