Đầu vào tùy chỉnh OEM

Sử dụng dữ liệu nhập tùy chỉnh OEM để thêm các sự kiện nhập dữ liệu Ô tô mới 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 Android hiện có, được thiết kế 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 được nhấn, sẽ mở ra 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 Android KeyEvent hiện có để tạo CustomInputEvent chỉ để sử dụng khi không thể sử dụng Android KeyEvent nào để thể hiện tính năng này.

HW_CUSTOM_INPUT

Đầu vào tùy chỉnh OEM được biểu thị bằng HW_CUSTOM_INPUTCustomInputEvent.java . HW_CUSTOM_INPUT là sự kiện gốc, được khởi tạo bởi phần cứng ô tô (Xe HAL). 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 là [chỉ đọc]{:.external}, với VehiclePropertyAccess:READ .

Để đảm bảo Xe HAL luôn có thể phát 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 chung int32 , được đặt là [global]{:.external} (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 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 nhấn nút.

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

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

inputHalService chuyển đổi HW_CUSTOM_INPUT đến thành CustomInputEvent , một lớp Java có thể phân chia được nằm trong car-lib/src/android/car/input , cùng với giao diện hỗ trợ tương ứng.

CarInputService , một dịch vụ cốt lõi của Car input, nhận các CustomInputEvent đến rồi gửi chúng đến bất kỳ dịch vụ hệ thống Android đã đăng ký nào.

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

Sơ đồ sau minh họa quy trình làm việc của sự kiện Nhập liệu tùy chỉnh OEM.

Quy trình nhập liệu tùy chỉnh OEM

Dịch vụ hệ thống OEM Android

OEM cung cấp dịch vụ hệ thống Android của họ để 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 CustomInputEvents từ API đầu vào ô tô ( CarInputManager ). Không có dịch vụ hoặc ứng dụng của bên thứ ba nào có thể được ký với sự cho phép của 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 của bên thứ ba nào có thể đăng ký API đầu vào ô tô.

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

Thực hiện tham khảo

Xem cách triển khai tham chiếu trong packages/services/Car/tests/SampleCustomInputService , được cung cấp dưới dạng ví dụ và hướng dẫn. Ví dụ: để thêm một nút mới trong đ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í ô tô hiện tại.

Trong ví dụ này, OEM đã chọn INPUT_CODE_F1 (chức năng tiện lợi CustomInputEvent đầu tiên) để thể hiện tính năng mới này (mở ứng dụng bản đồ với vị trí ô tô 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 khảo .

Khi nhận đượ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 điều này, hãy xem CustomInputEventListener.java .