MTK android11 新增按键流程(framework)

以新增一个新按键F15为例

前提是bsp部分配置好GPIO相关部分,并在mtk-kpd.kl文件中配置新增按键,与framework的qwerty.kl相对应

a.  添加与BSP配置对应关系 

frameworks/base/data/keyboards/qwerty.kl

### 新增F15
key 185   F15

b.  修改KeyEvent

	
frameworks/base/core/java/android/view/KeyEvent.java

// 新增
public static final int KEYCODE_F15 = 290;

// 修改 LAST_KEYCODE
public static final int LAST_KEYCODE = KEYCODE_F15;

c. 修改attrs配置档

frameworks/base/core/res/res/values/attrs.xml

<attr name="keycode">

<enum name="KEYCODE_F15" value="290" />

</attr>

d. InputEventLabels.h

frameworks/native/include/input/InputEventLabels.h

static const InputEventLabel KEYCODES[] = {
    DEFINE_KEYCODE(F15),    //Added 
}

 e. keycodes.h

frameworks/native/include/android/keycodes.h

enum {
   
    AKEYCODE_F15 = 290,    //添加

};

f. 最后在PhoneWindowManager.java中修改interceptKeyBeforeQueueing方法

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
//。。。。。

case KeyEvent.KEYCODE_F15:
{
 //do somethings
 break;
}

//。。。。。
}

g. 编译

由于在framework中新增了一个API,所以在编辑之间先执行

make update-api <model>

来更新framework的公共API文件并提交到代码库。不执行上面的指令编译会报错

******************************

You have tried to change the API from what has been previously approved.

To make these errors go away, you have two choices:
   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
      errors above.

   2) You can update current.txt by executing the following command:
         make update-api

      To submit the revised current.txt to the main Android repository,
      you will need approval.
******************************

后记

在和BSP进行联调时,发现键值上层一直无法监听到底层抛上来的键值,最后发现是BSP没有为新增键值使用专属的kl,那么系统就会使用默认的那个Generic.kl文件。而第a步的修改则不起作用。

android/frameworks/base/data/keyboards/Generic.kl

key 185   F15

补充知识:

android kl(key layout)文件是一个映射文件,是标准linux与anroid的键值映射文件,kl文件可以有很多个,但是它有一个使用优先级:

/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl  
/system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl  
/system/usr/keylayout/DEVICE_NAME.kl  
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl  
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl  
/data/system/devices/keylayout/DEVICE_NAME.kl  
/system/usr/keylayout/Generic.kl  
/data/system/devices/keylayout/Generic.kl  

調試命令:

#獲取當前點擊的event事件詳情
adb shell getevent -l
#獲取系統輸入輸出節點的詳情
adb shell dumpsys input
#模擬按鍵輸入
adb shell input keyevent (int)keycode

擴展知識參考:

Android 按键映射kl文件编写简析 - 简书以下内容需要在驱动正常的情况下进行 kl文件 kl(key layout)文件是一个映射文件,是标准linux与anroid键值映射文件,kl文件可以有很多个,但是它有一个使...https://www.jianshu.com/p/1b0ae800b5bf

https://code84.com/778343.htmlhttps://code84.com/778343.html

移植kl文件,却调用到默认的Generic.kl的解决办法 - CodeAntenna从之前一个机种向现在要开发的机种移植遥控按键,发现总是有部份的功能键无作用。执行dumpsysinput查看当前的按键的kl,发现KeyLa...,CodeAntenna代码工具网https://codeantenna.com/a/XzlxH3oNCy

android kl文件 - CodeAntennaandroidkl(keylayout)文件是一个映射文件,是标准linux与anroid的键值映射文件,kl文件可以有很多个,但是它有一个使用优先级...,CodeAntenna代码工具网https://codeantenna.com/a/zaRoh0Kzgb

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值