1. 輸入按鍵
我們知道Android系統(tǒng)的按鍵分為三類:(1)Global Key;(2)System Key;(3)User Key
Global Key:按下一個按鍵,啟動某個APP。 具體使用哪個按鍵啟動哪個APP可以自己指定,修改\frameworks\base\core\res\res\xml\Global_keys.xml,接下來有一篇博文具實現(xiàn),假設(shè)它是AKEYCODE_TV
System Key:比如音量鍵(AKEYCODE_VOLUME_DOWN)
User Key:其他按鍵,比如ABCD(AKEYCODE_A)
2. 回顧
2.1 概述
Reader線程把驅(qū)動上報的scancode根據(jù).kl文件轉(zhuǎn)化為keycode,Dispatch線程根據(jù)所獲得keycode進行處理。Android Dispatch線程對這三類按鍵的處理
* Global Key* System Key* User Key
2.2 具體處理流程
Reader線程將輸入事件稍作處理
Reader線程會將輸入事件放入mInBoundQueue隊列中
Dispatch線程將從mInBoundQueue隊列中取出輸入事件,稍作處理
再將處理后的輸入事件放入mOutBoundQueue隊列
最后再從mOutBoundQueue隊列中取出來,發(fā)給目的應(yīng)用
3. 閱讀源碼分析三種按鍵的處理過程
之前已經(jīng)分析了Reader線程從驅(qū)動程序得到掃描碼之后,根據(jù).KL文件,得到對應(yīng)的按鍵碼,然后構(gòu)造args參數(shù),接著使用NotifiyKey將該參數(shù)告訴Reader線程的Listener,而Reader線程的監(jiān)聽者肯定為Dispatch線程,要想驗證,可以通過源代碼分析得出。
3.1 Golbal Key分析
1. Reader線程獲得他的Listener,調(diào)用notifykey做進一步的處理
InputReader.cpp
NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags, down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP, &nbs