1. 輸入按鍵

我們知道Android系統(tǒng)的按鍵分為三類:(1)Global Key;(2)System Key;(3)User Key

  • Global Key:按下一個(gè)按鍵,啟動(dòng)某個(gè)APP。 具體使用哪個(gè)按鍵啟動(dòng)哪個(gè)APP可以自己指定,修改\frameworks\base\core\res\res\xml\Global_keys.xml,接下來有一篇博文具實(shí)現(xiàn),假設(shè)它是AKEYCODE_TV

  • System Key:比如音量鍵(AKEYCODE_VOLUME_DOWN)

  • User Key:其他按鍵,比如ABCD(AKEYCODE_A)

2. 回顧

2.1 概述

Reader線程把驅(qū)動(dòng)上報(bào)的scancode根據(jù).kl文件轉(zhuǎn)化為keycode,Dispatch線程根據(jù)所獲得keycode進(jìn)行處理。Android Dispatch線程對這三類按鍵的處理

* Global Key* System Key* User Key
2.2 具體處理流程
  1. Reader線程將輸入事件稍作處理

  2. Reader線程會(huì)將輸入事件放入mInBoundQueue隊(duì)列中

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

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

  5. 最后再從mOutBoundQueue隊(duì)列中取出來,發(fā)給目的應(yīng)用

3. 閱讀源碼分析三種按鍵的處理過程

之前已經(jīng)分析了Reader線程從驅(qū)動(dòng)程序得到掃描碼之后,根據(jù).KL文件,得到對應(yīng)的按鍵碼,然后構(gòu)造args參數(shù),接著使用NotifiyKey將該參數(shù)告訴Reader線程的Listener,而Reader線程的監(jiān)聽者肯定為Dispatch線程,要想驗(yàn)證,可以通過源代碼分析得出。

3.1 Golbal Key分析

1. Reader線程獲得他的Listener,調(diào)用notifykey做進(jìn)一步的處理
InputReader.cpp
NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags,
        down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP,
&nbs