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 具體處理流程
  1. Reader線程將輸入事件稍作處理

  2. Reader線程會將輸入事件放入mInBoundQueue隊列中

  3. Dispatch線程將從mInBoundQueue隊列中取出輸入事件,稍作處理

  4. 再將處理后的輸入事件放入mOutBoundQueue隊列

  5. 最后再從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
        
		

網(wǎng)友評論