使用原始設備製造商 (OEM) 自訂輸入內容,為新的和非標準新增車輛輸入事件
Android 功能現有的非標準輸入事件不會對應至現有的
Android KeyEvent
,專為任何 Android 介面而設計
,但不會進一步導入原始設備製造商 (OEM) 專屬功能。舉例來說
位於方向盤控制項上,按下後就會開啟地圖應用程式
(透過意圖取得) 以及車輛的目前位置。這項功能支援
駕駛人,即時查看自己目前的所在位置,而不會分心
。
本文說明如何重複使用現有的 Android KeyEvent
,
建立 CustomInputEvent
,供 Android KeyEvent
無法存取時使用
用來代表地圖項目
HW_CUSTOM_INPUT
OEM 自訂輸入以 HW_CUSTOM_INPUT 表示
CustomInputEvent.java。HW_CUSTOM_INPUT 是
由車輛硬體例項化 (車輛 HAL)。原始設備製造商 (OEM) 會決定
如何將此事件例項化。HW_CUSTOM_INPUT 的存取權為
使用 VehiclePropertyAccess:READ
設為 [唯讀]{:.external}。
為確保車輛 HAL 一律能播送最新的可用值,
HW_CUSTOM_INPUT 通知已設為 ON_CHANGE
,
VehiclePropertyChangeMode:ON_CHANGE
。
HW_CUSTOM_INPUT 值由一般性陣列組成
int32
,設為 [global]{:.external} (含 VehicleArea:GLOBAL
)]。
一般整數為:
第一個元素代表原始設備製造商 (OEM) 定義的輸入程式碼。 您可以將任何語意與輸入程式碼建立關聯。
第二個元素會儲存目標螢幕 (例如主螢幕) 或叢集
第三個元素包含重複事件的次數。 例如,指出按下某按鈕的次數。
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,系統服務必須:
透過 CarInputManager#requestInputEventCapture 註冊。 傳遞
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
做為輸入內容 type 參數服務必須叫用才能取消註冊 CarInputManager#releaseInputEventCapture。
下圖說明 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。