原始設備製造商 (OEM) 自訂輸入內容

使用原始設備製造商 (OEM) 自訂輸入內容,為新的和非標準新增車輛輸入事件 Android 功能現有的非標準輸入事件不會對應至現有的 Android KeyEvent,專為任何 Android 介面而設計 ,但不會進一步導入原始設備製造商 (OEM) 專屬功能。舉例來說 位於方向盤控制項上,按下後就會開啟地圖應用程式 (透過意圖取得) 以及車輛的目前位置。這項功能支援 駕駛人,即時查看自己目前的所在位置,而不會分心 。

本文說明如何重複使用現有的 Android KeyEvent, 建立 CustomInputEvent,供 Android KeyEvent 無法存取時使用 用來代表地圖項目

HW_CUSTOM_INPUT

OEM 自訂輸入以 HW_CUSTOM_INPUT 表示 CustomInputEvent.javaHW_CUSTOM_INPUT 是 由車輛硬體例項化 (車輛 HAL)。原始設備製造商 (OEM) 會決定 如何將此事件例項化。HW_CUSTOM_INPUT 的存取權為 使用 VehiclePropertyAccess:READ 設為 [唯讀]{:.external}。

為確保車輛 HAL 一律能播送最新的可用值, HW_CUSTOM_INPUT 通知已設為 ON_CHANGEVehiclePropertyChangeMode:ON_CHANGE

HW_CUSTOM_INPUT 值由一般性陣列組成 int32,設為 [global]{:.external} (含 VehicleArea:GLOBAL)]。 一般整數為:

  1. 第一個元素代表原始設備製造商 (OEM) 定義的輸入程式碼。 您可以將任何語意與輸入程式碼建立關聯。

  2. 第二個元素會儲存目標螢幕 (例如主螢幕) 或叢集

  3. 第三個元素包含重複事件的次數。 例如,指出按下某按鈕的次數。

CustomInputEvent 和 Car Input API

InputHalService 是接收傳入連線的車輛服務 車輛 HAL 的 HW_CUSTOM_INPUT

InputHalService 可將傳入的 HW_CUSTOM_INPUT 轉換為 CustomInputEvent,即 Java parcelable類別 car-lib/src/android/car/input 以及 aidl 介面

CarInputService 是核心車輛輸入服務,可接收傳入的流量 CustomInputEvents 並傳送至任何已註冊的 Android 系統服務。

如要註冊及接收傳入的 CustomInputEvents,系統服務必須:

下圖說明 OEM 自訂輸入事件的工作流程。

原始設備製造商 (OEM) 自訂輸入工作流程

原始設備製造商 (OEM) Android 系統服務

原始設備製造商 (OEM) 會提供 Android 系統服務來處理傳入的 來自「CarInputService」的 CustomInputEvents。

僅限標有 android.permission.INJECT_EVENTS 權限 可透過 Car Input API 註冊及接收 CustomInputEvents (CarInputManager)。任何第三方服務或應用程式都無法 代表使用此 Android 系統權限 (僅限原始設備製造商 (OEM) 服務) 簽署。 因此,任何第三方服務或應用程式都無法註冊 與 Car Input API 交叉比對

原始設備製造商 (OEM) Android 系統服務可存取 SystemApi 和公開方法。

參照實作

請參考以下參考實作的實作方式: packages/services/Car/tests/SampleCustomInputService 參考標準和指南舉例來說 就在方向盤控制項中按下這個新按鈕後, 取得目前車輛位置的地圖應用程式

在此範例中,原始設備製造商 (OEM) 選擇了 INPUT_CODE_F1 (第一個 CustomInputEvent 便利函式),來表示這項新功能 (以 目前車子的位置)。

啟動期間,這項服務會自行針對 CarInputManager 註冊 到 requestInputEventCapture (請參閱 參考實作註冊程式碼

接收傳入的 CustomInputEvents 時,這項服務會傳送意圖 啟動地圖應用程式。若要瞭解實際操作過程,請參閱: CustomInputEventListener.java