Android 設備上的鍵盤操作

本文簡要彙總了 Android 設備上的鍵盤操作。

1.EventHub 從 evdev 驅動程序中讀取原始事件,並使用鍵盤的按鍵佈局映射將 Linux 按鍵代碼(有時也稱掃描代碼)映射到 Android 按鍵代碼中。

2.InputReader 將消費原始事件,並更新 Meta 鍵狀態。例如,如果您按下或釋放左 Shift 鍵,則讀取器會相應地設置或重置 META_SHIFT_LEFT_ON 和 META_SHIFT_ON 位。

3.InputReader 會向 InputDispatcher 發送按鍵事件的相關通知。

4.InputDispatcher 通過調用 WindowManagerPolicy.interceptKeyBeforeQueueing 詢問 WindowManagerPolicy 如何處理按鍵事件。該方法(負責在按下某些按鍵時喚醒設備)屬於關鍵路徑的一部分。實際上,EventHub 會在此關鍵路徑上一直持有喚醒鎖,從而確保它運行至結束。

5.如果目前正在使用 InputFilter,那麼 InputDispatcher 將給予它機會來消費或轉換按鍵。InputFilter 可用於實施低級別的全系統可訪問性策略。

6.InputDispatcher 可將按鍵排入隊列,以便在分配線程上對按鍵進行處理。

7.當 InputDispatcher 將按鍵移出隊列時,它會通過調用 WindowManagerPolicy.interceptKeyBeforeDispatching 使 WindowManagerPolicy 再次有機會攔截按鍵事件。此方法可用於處理系統快捷方式和其他功能。

8.隨後,InputDispatcher 會識別按鍵事件目標(活動窗口),並等待按鍵事件目標就緒。接下來,InputDispatcher 會將按鍵事件發送到應用。

9.在應用內,按鍵事件會將視圖層次傳送到焦點視圖,以進行 IME 按鍵預分配。

10.如果按鍵事件未在 IME 按鍵預分配階段進行處理,而某個 IME 正在使用中,那麼按鍵事件會被髮送到 IME。

11.如果按鍵事件未被 IME 消費,則按鍵事件會將視圖層次傳送到焦點視圖,從而進行標準按鍵分配。

12.應用反過來向 InputDispatcher 報告有關按鍵事件是否被消費的情況。如果事件未被消費,則 InputDispatcher 會調用 WindowManagerPolicy.dispatchUnhandledKey 來應用“回退”行爲。根據回退操作,可以使用不同的按鍵代碼重新啓動按鍵事件分配週期。例如,如果應用不處理 KEYCODE_ESCAPE,則系統可能會將按鍵事件作爲 KEYCODE_BACK 再次分配。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章