當(dāng)手機外設(shè)增加物理按鍵(類似VOLUME_UP/ VOLUME_DOWN的按鍵),需要們?nèi)ザx添加鍵值,提供給APP使用。
前提:
framework層添加前,要確定按鍵驅(qū)動是否調(diào)好:
adb shell getevent
/dev/input/event3: 0001 02fe 00000001
/dev/input/event3: 0000 0000 00000000
/dev/input/event3: 0001 02fe 00000000
/dev/input/event3: 0000 0000 00000000
其中02fe就是驅(qū)動上報的值,兩次的1,0是指按下和彈起的動作。
1. gpio-keys.kl
gpio-keys.kl 這個文件對應(yīng)的是定制機的kl 文件,不一定是這個名字,定義在 AndroidBoard.mk 中的: LOCAL_MODULE := gpio-keys.kl ,在手機中可以在/system/usr/keylayout 找到這個文件
將驅(qū)動上報的02fe轉(zhuǎn)為十進制的766, 并且定義:
key 766???? F14
這樣就完成了對物理按鍵kl文件的映射到“F14”
2.framework native 中定義:
/frameworks/native/include/android/keycodes.h
AKEYCODE_F14 = 901
/frameworks/native/include/input/InputEventLabels.h
DEFINE_KEYCODE(F14)
3. framework base下的定義:
frameworks/base/core/java/android/view/KeyEvent.java:
定義按鍵的keyCode 也就是 APP 在onKeyDown() 獲取的keyCode
public static final int KEYCODE_F14 = 901; // 注意APP獲取的keyCode是901 不是766?
frameworks/base/core/res/res/values/attrs.xml:
<enum?name="KEYCODE_F14" value="901"/>
按照以往的經(jīng)驗來看,配置到這里編譯運行,添加的按鍵應(yīng)該可以生效了。但是在8.0上并非如此
4.android O 需要添加:
frameworks/base/data/keyboards/Generic.kl
frameworks/base/data/keyboards/qwerty.kl
key 766 F14
完成這一步才會生效。
鍵值最大767
總結(jié):android 8.0 在代碼的編譯上有很多變化,在6.0/7.0 的可以生效的設(shè)置往往會失效,這時候需要我們多研究了,因為很多版本上的差異官網(wǎng)也沒有說清楚。