谷歌致力於推進種族平等的黑人社區。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

輸入

Android的輸入HAL圖標

在Android輸入子系統名義上由事件管道橫穿所述系統的多個層組成。

輸入管道

在最低層,物理輸入裝置產生描述狀態改變如按鍵和觸摸接觸點的信號。設備固件編碼和發送以某種方式將這些信號例如通過發送USB HID報告給系統或通過I2C總線上產生中斷。

這些信號隨後通過在Linux內核中的設備驅動程序解碼。 Linux內核提供驅動許多標準外設,特別是那些堅持以HID協議。然而,OEM必須經常用作要受到在一個低級別的緊密集成到系統中的嵌入式設備,諸如觸摸屏提供定制的驅動程序。

輸入設備驅動程序負責翻譯設備特定信號轉換成標準的輸入事件的格式,由Linux輸入協議的方式。在Linux輸入協議定義了在一組標準的事件類型和碼linux/input.h內核頭文件。通過這種方式,在內核之外的組件並不需要有關細節問題,如身體掃描碼,HID用途,I2C消息,GPIO引腳,等等。

接著,在Android EventHub部件通過打開讀取從內核輸入事件evdev與每個輸入設備相關聯的驅動程序。然後在Android InputReader部件根據器件類解碼輸入的事件,並產生的Android的輸入事件流。作為此過程的一部分,在Linux輸入協議事件代碼根據所述輸入裝置的配置,鍵盤佈局文件,以及各種映射表翻譯成的Android事件代碼。

最後, InputReader發送輸入事件到InputDispatcher它們轉發到相應的窗口。

控制點

有輸入管道,其效果控制在輸入設備的行為幾個階段。

驅動程序和固件配置

輸入設備驅動程序經常在寄存器設置參數,甚至載固件本身配置輸入設備的行為。這是特別為嵌入式設備如觸摸屏,其中所述校準處理的一個大的部分涉及調諧這些參數或固定所述固件以提供所需的精度和響應性和抑制噪聲的情況。

驅動程序配置選項通常指定為在內核板支持包(BSP),使得相同的驅動程序可以支持多個不同的硬件實現模塊參數。

本文檔不嘗試描述驅動程序或固件配置,但它確實提供了指導,設備校準一般。

主板配置屬性

內核板支持包(BSP)可以經由由在Android InputReader組件中使用,諸如虛擬鍵的觸摸屏上的放置SYSFS導出板配置屬性。

請參考設備類部分,詳細了解不同的設備如何使用板配置屬性。

資源疊加

幾個輸入行為是由在資源重疊的方式配置config.xml如蓋開關的操作。

這裡有一些例子:

  • config_lidKeyboardAccessibility :指定蓋開關對硬件鍵盤是否可以訪問或隱藏的效果。

  • config_lidNavigationAccessibility :指定蓋開關的上的觸控板是否可訪問的或隱藏的效果。

  • config_longPressOnPowerBehavior :當用戶按下電源按鈕,指定要發生什麼。

  • config_lidOpenRotation :指定蓋開關的屏幕取向的影響。

參閱內的文檔frameworks/base/core/res/res/values/config.xml約每一個配置選項的詳細信息。

鍵映射

鍵映射被用於通過在Android EventHubInputReader組件來配置從Linux的事件代碼的映射到為鍵,操縱桿按鈕和操縱桿軸的Android事件代碼。所述映射可以是設備或依賴於語言的。

請參閱設備類板塊,詳細了解設備如何使用不同的鍵映射。

輸入設備配置文件

輸入設備配置文件用於通過在Android EventHubInputReader組件來配置特殊的裝置特性,例如觸摸大小信息如何被報導。

請參考設備類部分,詳細了解設備如何使用不同的輸入設備的配置圖。

了解HID用法和事件代碼

經常有用於指任何給定的按鍵的鍵盤上的幾個不同的標識符,按鈕遊戲控制器,操縱桿軸或其它控制。這些標識符之間的關係並不總是相同的:它們依賴於一組映射表,其中一些是固定的,並且其中一些變化基於器件的特性,設備驅動器,當前區域,系統配置,用戶偏好等因素。

物理掃描代碼

物理掃描碼是與每個鍵,按鈕或其他控件相關聯的設備特定的標識符。因為物理掃描碼經常會發生變化,從一個設備到另一個,固件或設備驅動程序負責將它們映射到標準標識符,諸如HID用法或Linux鍵碼。

掃描碼主要用於鍵盤興趣。其它裝置通常在使用GPIO引腳,I2C消息或其它裝置低電平通信。因此,軟件堆棧的上層依靠設備驅動程序,使正在發生的事情的感覺。

HID用法

甲HID用法是用於報告的控制的狀態,如一個鍵盤鍵,操縱桿軸,鼠標按鈕,或觸摸接觸點標準標識符。最USB和藍牙輸入裝置符合HID規範,這使得能夠以均勻的方式與他們的接口系統。

Android框架依賴於Linux內核驅動HID翻譯HID使用代碼進入Linux鍵碼和其它標識符。因此HID用途主要感興趣的外設製造商。

Linux的鍵碼

一個Linux鍵碼為鍵或按鈕標準標識符。 Linux的鍵代碼中所定義linux/input.h使用隨前綴開頭常量頭文件KEY_BTN_ 。 Linux內核輸入驅動程序負責將身體掃描碼,HID用法和其他設備特定的信號轉換成Linux的鍵碼,並作為部分提供關於他們的信息EV_KEY事件。

Android的API有時指的是用鑰匙作為其“掃描代碼”相關的Linux的關鍵代碼。這在技術上不正確,但它有助於區分Android的按鍵代碼的Linux關鍵代碼的API中。

Linux的相對或絕對軸代碼

一個Linux相對或絕對軸代碼是用於報告相對運動或沿軸線絕對位置,如沿其X軸或沿其X軸操縱桿的絕對位置的鼠標的相對移動一個標準標識符。 Linux的軸代碼中所定義linux/input.h使用隨前綴開頭常量頭文件REL_ABS_ 。 Linux內核輸入驅動程序負責翻譯HID用途和其它設備特定的信號進入Linux軸線代碼和作為其一部分提供關於它們的信息EV_RELEV_ABS事件。

Linux的切換代碼

一個Linux開關碼是用於報告的裝置,在一個開關的狀態,諸如蓋開關標準標識符。 Linux的開關代碼在定義linux/input.h使用隨前綴開頭常量頭文件SW_ 。 Linux內核輸入驅動器報告開關狀態變化EV_SW事件。

Android應用一般不接收來自交換機的事件,但該系統可以用它們內部來控制各種設備特定的功能。

Android的鍵碼

一個Android鍵碼是Android API中定義用於指示一個特定鍵,如“HOME”標準標識符。 Android的關鍵代碼由定義android.view.KeyEvent類為與前綴開頭的常量KEYCODE_

按鍵佈局指定Linux的關鍵代碼是如何映射到Android鍵碼。不同的鍵盤佈局可能會因鍵盤模型,語言,國家,佈局,或特殊功能一起使用。

的Android的鍵碼的組合被變換成使用裝置和語言環境特定的鍵字符映射的字符代碼。例如,當確認鍵KEYCODE_SHIFTKEYCODE_A都擠壓在一起,系統查找該組合中的關鍵字符映射表,發現大寫字母“A”,然後將其插入到當前焦點的文本控件。

Android的Axis代碼

一個Android軸代碼是Android API中定義用於指示特定設備軸線的標準標識符。機器人軸代碼由定義android.view.MotionEvent類作為與前綴開頭常數AXIS_

按鍵佈局指定的Linux軸代碼是如何映射到Android軸線碼。不同的鍵盤佈局可以根據設備型號,語言,國家,佈局,或特殊功能一起使用。

Android的國家元

一個Android元狀態是Android API中定義用於指示被按下的修飾鍵標準標識符。安卓元狀態由定義android.view.KeyEvent類為與前綴開頭的常量META_

當前元狀態是由監視器時修飾鍵如在Android InputReader分量確定KEYCODE_SHIFT_LEFT被按壓/釋放並且設置/復位適當的元狀態標誌。

修改鍵和元國之間的關係是硬編碼,但按鍵佈局可以改變自己是如何修改鍵映射這反過來影響了元國。

Android的按鈕狀態

一個Android按鈕狀態是Android API中定義用於指示按鈕(上鼠標或手寫筆)的標準標識符被壓。 Android的按鈕狀態由定義android.view.MotionEvent類為與前綴開頭的常量BUTTON_

當前按鈕狀態是由監視器按鈕(上鼠標或手寫筆)的按下時/釋放,並置位/復位相應的按鈕狀態標誌在Android InputReader分量確定。

按鈕和按鈕狀態之間的關係是固定的。

延伸閱讀

  1. Linux的輸入事件代碼
  2. Linux的多點觸摸協議
  3. Linux的輸入驅動器
  4. Linux的力反饋
  5. HID的信息,包括HID使用表