Android 10 新增物理按键
1.當驅動層添加完成配置后,通過getevent命令查看底層驅動配置的鍵值
Seoul_TF:/ $?Seoul_TF:/ $ getevent
add device 1: /dev/input/event2
? name: ? ? "mtk-tpd"
add device 2: /dev/input/event0
? name: ? ? "ACCDET"
add device 3: /dev/input/event1
? name: ? ? "mtk-kpd"
/dev/input/event1: 0001 00f9?00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 00f9?00000000
/dev/input/event1: 0000 0000 000000002
———————————————————————————————————————————
2.添加KL 映射??
按鍵布局文件由 ?供應商、產品(可能還包括版本)ID 或輸入設備名稱來確定位置。系統會按順序查閱以下路徑,在以下任一kl文件下添加映射即可:
如果所有文件都沒有,系統會默認是去讀取/data/system/devices/keylayout/Generic.kl配置
- /odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
- /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
- /system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
- /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
- /odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
- /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
- /system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
- /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
- /odm/usr/keylayout/DEVICE_NAME.kl
- /vendor/usr/keylayout/DEVICE_NAME.kl
- /system/usr/keylayout/DEVICE_NAME.kl
- /data/system/devices/keylayout/DEVICE_NAME.kl
- /odm/usr/keylayout/Generic.kl
- /vendor/usr/keylayout/Generic.kl
- /system/usr/keylayout/Generic.kl
- /data/system/devices/keylayout/Generic.kl
由第一步getevent查詢 可知此按鍵是00f9,10進制249,名稱可以自定義,這里我命名為 CUSTIOM_KEY,首先需要在/data/system/devices/keylayout/Generic.kl添加紅色部分:
....
key 165 ? MEDIA_PREVIOUS
key 168 ? MEDIA_REWIND
key 159 ? MEDIA_FAST_FORWARD
key 249? ?CUSTIOM_KEY? ?
....
———————————————————————————————————————————
3. 在目錄frameworks/native/include/android/keycodes.h文件中
末尾處添加 紅色部分:
? ?......
? ? AKEYCODE_THUMBS_UP = 286,
? ? /** Thumbs down key. Apps can use this to let user downvote content. */
? ? AKEYCODE_THUMBS_DOWN = 287,
? ? /** Used to switch current account that is consuming content.
? ? ?* May be consumed by system to switch current viewer profile. */
? ? AKEYCODE_PROFILE_SWITCH = 288,
? ? /* AI Key */
? ? AKEYCODE_CUSTIOM_KEY? = 289
———————————————————————————————————————————
4. 在InputEventLabels.h里面也按順序添加在最后面
frameworks/native/include/input/InputEventLabels.h
? ? ......
? ? DEFINE_KEYCODE(ALL_APPS),
? ? DEFINE_KEYCODE(REFRESH),
? ? DEFINE_KEYCODE(THUMBS_UP),
? ? DEFINE_KEYCODE(THUMBS_DOWN),
? ? DEFINE_KEYCODE(PROFILE_SWITCH),
? ? DEFINE_KEYCODE(CUSTIOM_KEY),
? ? { nullptr, 0 }
};
———————————————————————————————————————————
5.在KeyEvent.java里面最后依次添加,并把LAST_KEYCODE改為才添加的? ?
紅色標記部分
? ? /**
? ? ?* Key code constant: Used to switch current {@link android.accounts.Account} that is
? ? ?* consuming content. May be consumed by system to set account globally.
? ? ?*/
? ? public static final int KEYCODE_PROFILE_SWITCH = 288;
? ? /**
? ? ?* @hide
? ? ?*/
? ? public static final int KEYCODE_CUSTIOM_KEY = 289;
? ? ?@TestApi
? ? public static final int LAST_KEYCODE = KEYCODE_CUSTIOM_KEY;
———————————————————————————————————————————
6.更新api文檔
test-current.txt這個API文檔也需要同步修改LAST_KEYCODE
frameworks/base/api/test-current.txt
? public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
? ? method public static String actionToString(int);
? ? method public final void setDisplayId(int);
? ? field public static final int LAST_KEYCODE = 289;?
? }
———————————————————————————————————————————
7.最后一步在attrs.xml最后面同步添加
frameworks/base/core/res/res/values/attrs.xml
? ? ? ? <enum name="KEYCODE_REFRESH" value="285" />
? ? ? ? <enum name="KEYCODE_THUMBS_UP" value="286" />
? ? ? ? <enum name="KEYCODE_THUMBS_DOWN" value="287" />
? ? ? ? <enum name="KEYCODE_PROFILE_SWITCH" value="288" />
? ? ? ? <enum name="KEYCODE_CUSTIOM_KEY" value="289" />
? ? </attr>
———————————————————————————————————————————
驗證:以上步驟完成?
PhoneWindowManager.java里就能收到此按鍵點擊事件了,對事件做對應處理即可
@Override
? ? public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
? ? .......
? ? ?// Handle special keys.
? ? ? ? switch (keyCode) {
? ? ? ? ? ? case KeyEvent.KEYCODE_CUSTIOM_KEY:{
? ? ? ? ? ? ? ? .......
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? case KeyEvent.KEYCODE_BACK:{
? ? ? ? ? ? }
? ? .......
?}
注:文中紅色標記部分為修改或者添加部分
總結:新的物理按鍵,要上層收到對應事件,只需要按部就班參照系統按鍵實現即可,system提供scancode,上層轉換為keycode使用。
?
總結
以上是生活随笔為你收集整理的Android 10 新增物理按键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 传参时传内置类型时用传值(pas
- 下一篇: 计算任意多边形的面积