Android 8.0 (Oreo) 添加按鍵及鍵值

當(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)也沒有說清楚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容