輸入裝置設定檔 (.idc
檔案) 包含裝置專屬的設定屬性,這些屬性會影響輸入裝置的行為。
對於 HID 鍵盤和滑鼠等標準周邊裝置,輸入裝置設定檔通常不必要,因為預設的系統行為通常可確保這些裝置可立即運作。另一方面,內建嵌入式裝置 (尤其是觸控螢幕) 幾乎總是需要輸入裝置設定檔來指定行為。
原因
Android 會根據相關聯的 Linux 核心輸入裝置驅動程式回報的事件類型和屬性,自動偵測及設定大多數輸入裝置功能。
舉例來說,如果輸入裝置支援 EV_REL
事件類型,並且程式碼為 REL_X
和 REL_Y
,以及 EV_KEY
事件類型和 BTN_MOUSE
,那麼 Android 就會將輸入裝置歸類為滑鼠。預設行為
會顯示遊標移動畫面的遊標
並模擬點選滑鼠時的觸控動作。雖然滑鼠
預設行為通常已足以應付
標準滑鼠週邊裝置。
某些類別的輸入裝置則較為模糊。例如:多點觸控
觸控螢幕和觸控面板都支援 EV_ABS
事件類型和代碼
最低價格為 ABS_MT_POSITION_X
和 ABS_MT_POSITION_Y
。不過,預期的動作
這些裝置的使用情形差異很大,不一定每次都能判斷
。此外,您還需要額外資訊,才能解讀觸控裝置回報的壓力和大小資訊。因此,觸控裝置 (尤其是內建觸控螢幕) 通常需要 IDC 檔案。
位置
輸入裝置設定檔會依 USB 供應商、產品 (和選版本) ID 或輸入裝置名稱來定位。
系統會依序查詢下列路徑。
/product/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/system_ext/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/odm/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/vendor/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/product/usr/idc/Vendor_XXXX_Product_XXXX.idc
/system_ext/usr/idc/Vendor_XXXX_Product_XXXX.idc
/odm/usr/idc/Vendor_XXXX_Product_XXXX.idc
/vendor/usr/idc/Vendor_XXXX_Product_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
/product/usr/idc/device-name.idc
/system_ext/usr/idc/device-name.idc
/odm/usr/idc/device-name.idc
/vendor/usr/idc/device-name.idc
/system/usr/idc/device-name.idc
/data/system/devices/idc/device-name.idc
建構含有裝置名稱的檔案路徑時,除了 '0'-'9'、'a'-'z'、'A'-'Z'、'-' 或 '_' 之外,裝置名稱中的所有字元都會替換為 '_'。
語法
輸入裝置的設定檔是由屬性組成的純文字檔案 作業和註解。
屬性
屬性指派項目各包含屬性名稱、=
、屬性值和新行。如下所示:
property = value
屬性名稱是指空白文字常值。不得包含空白。輸入系統的每個元件都會定義一組用於設定其功能的屬性。
屬性值不是空白字串常值、整數或浮點數。
不得包含空白字元或保留字元 \
或 "
。
屬性名稱和值須區分大小寫。
留言
註解行以 '#' 開頭,並延伸至行尾。就像這樣:
# A comment!
系統會忽略空白行。
範例
# This is an example of an input device configuration file. # It might be used to describe the characteristics of a built-in touch screen. # This is an internal device, not an external peripheral attached to the USB # or Bluetooth bus. device.internal = 1 # The device should behave as a touch screen, which uses the same orientation # as the built-in display. touch.deviceType = touchScreen touch.orientationAware = 1 # Additional calibration properties... # etc...
常見屬性
以下屬性適用於所有輸入裝置類別。
如要瞭解 各個類別使用的特殊屬性
device.internal
定義:device.internal
= 0
| 1
指出輸入裝置是否為內建元件,而非 外部連接 (最有可能移除的)週邊裝置。
-
如果值為
0
,表示裝置為外部裝置。 -
如果值為
1
,表示裝置為內部資料。 -
如未指定值,則 USB (BUS_USB) 或 Bluetooth (BUS_BLUETOOTH) 匯流排上的所有裝置的預設值為
0
,否則為1
。
這個屬性決定了與喚醒事件相關的預設政策決定。
內部輸入裝置通常不會從休眠狀態中喚醒螢幕 必須在主要版面配置檔案或硬式編碼政策規則中設定上述動作。這項區別可避免按鍵按壓和觸控動作在手機放在口袋時誤觸喚醒手機。通常只會定義少量的喚醒按鍵。
相反地,外部輸入裝置通常會更積極地喚醒裝置,因為 這類裝置在傳輸過程中會假設為關閉或未接上電源。舉例來說,按下外接鍵盤上的任何按鍵,就是使用者希望喚醒裝置並回應的最佳指標。
請務必確認所有內部輸入裝置的 device.internal
屬性值皆正確設定。
驗證
請務必使用以下程式碼驗證輸入裝置的設定檔: 驗證按鍵對應配置工具。