<?xml:namespace prefix = o />
type
:文字博文
topic
:Android 應用程式開發經驗
contest logo
:第二屆 Google 暑期大學生部落格分享大賽
-2011 Android 成長篇
1. 基本流程1
)核心處理按鍵,通過裝置檔案的方式提供給framework層
2
)framework層的KeyInputQueue
.java啟動線程從裝置檔案中讀出鍵碼,然後把讀出的鍵碼按kl檔案轉成相應鍵值
(JNI調用EventHub
.cpp
),最後寫入事件隊列
ps
:讀取鍵盤具體應該是eventHub類處理
3
)framework層的WindowManagerService
.java啟動線程從事件隊列中讀出鍵值,然後根據目前focus分發給相應視窗
ps
:剛才是 讀 鍵碼,現在是鍵值。
4
)UI通過KeyCharacterMap
.java處理kcm規則将使用者基本按鍵與功能鍵
(Shift
,Alt等
)組合,得出最終按鍵
2. 兩個配置檔案通常更換一種新的硬體,可能其鍵盤布局及鍵碼與标準版本不同,不用更改代碼,隻要修改以下配置檔案即可(如果增加新的未定義功能的按鍵,則需要修改代碼)
1
)xxx
.kl
a
)代碼位置
sdk
/emulator
/keymaps
/kl結尾檔案
(2.2版本模拟器使用
)。
b
)功能
硬體全鍵盤的鍵碼與鍵值的對應規則檔案(如0x21對應A)
2
)xxx
.kcm
a
)代碼位置
sdk
/emulator
/keymaps
/kcm結尾檔案
(2.2版本模拟器使用
)b
)功能
硬體全鍵盤的鍵值對應表(如按下Alt
,Shift時按鍵對應的鍵值)
PS:又提到kl
..kcm前面來自驅動層,kcm這裡有組合鍵,還有home
.. 3. 整個流程相關代碼1
)frameworks
/base
/core
/java
/android
/view
/KeyEvent
.java
(按鍵事件定義
)2
)frameworks
/base
/services
/java
/com
/android
/server
/KeyInputQueue
.java
(事件讀取線程
)//PS:相當于getMessage,待定。
3
)frameworks
/base
/services
/java
/com
/android
/server
/WindowManagerService
.java(事件分發線程)
//PS:相當于postMessage,sendMessage ,待定。
4
)frameworks
/base
/core
/java
/android
/view
/KeyCharacterMap
.java
(功能鍵轉換kcm
)5
)frameworks
/base
/libs
/ui
/EventHub
.cpp
(鍵碼與鍵值轉換
)轉載于:https://www.cnblogs.com/titer1/archive/2011/08/15/2138625.html