ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 10 新增物理按键

2021-10-28 14:07:05  阅读:406  来源: 互联网

标签:10 XXXX system kl usr 按键 Android KEYCODE keylayout


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 00b7 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 00b7 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 183   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使用。


 

标签:10,XXXX,system,kl,usr,按键,Android,KEYCODE,keylayout
来源: https://blog.csdn.net/a546036242/article/details/121012512

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有