抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 增加或修改(键盘)按键

增加或修改(键盘)按键

时间:2024-05-29 04:06:33

相关推荐

Android 增加(键盘)按键

以添加 camera按键为例(红色是需要添加的)

一、kernel键值定义

(1)键扫描码

ScanCode是由linux的Input驱动框架定义的整数类型,可参考input.h头文件,即getevent得到的键值。

#define KEY_Q 16

#define KEY_W 17

#define KEY_E 18

#define KEY_R 19

#define KEY_T 20

#define KEY_CAMERA 199

(2)键盘布局文件(*.kl)

将input event报的键值转换成具体键盘对应的按键供android上层使用,时通过键盘布局文件(*.kl)完成转换的。放在/system/usr/keylayout/下面

而qwert.kl中定义如下:

ScanCode + 字符串值

key 16 Q

key 17 W

key 18 E

key 19 R

key 20 T

其中ScanCode 是驱动报的值(即驱动input.h中定义的键值 )

A:添加kl文件:

abcxxxx.kl(文件名须与input 的device设备的name一致)

Key 199 CAMERA

199为 驱动定义的scanCode ,CAMERA为Android中 KEYCODES[]定义按键对应的keylabel字符】

注:

1)kl文件须与键盘输入的input的devic的名称一致,否则EventHub在加载设备时因找不到对应的kl而加载默认的qwert.kl,导致键值转换错误

2)kl中的scanCode和android中定义的keylabel字符必须对应,否则会转换错误。keyMapper在转换时是根据scanCode,来确定对应的按键字符,再根据此字符在KEYCODES中的位置来确定对应android中的键值。

B:kl文件添加到system

将kl文件(通常)放在/device/qcom/XXX/(XXX为项目名称)

(1)AndroidBoard.mk添加:

include $(CLERA_VARS)

LOCAL_MODULE :=abcxxxx.kl

LOCAL_MODULE_TARGS := optional eng

LOCAL_MODULE_CLASS := ETC

LOCAL_SRC_FILES := $(LOCAL_MODULE)

LOCAL_MODULE_PATH := $(TARGET_OUT_KEYLAYOUT)

include $(BUILD_PREBUILT)

(2)/device/qcom/common/base.mk添加

KEYPAD +=abcxxxx.kl

注:不加会导致kl文件不被打包进/system/usr/keylayout/

二、Android中添加按键

(1)定义按键对应的key label

在KEYCODES[]数组的最后添加按键的key label,

即:

static const KeycodeLabel KEYCODES[] = {

DEFINE_KEYCODE(HELP)

DEFINE_KEYCODE(CAMERA )

};

注:

位置

Android 4.4以前版本 frameworks/base/include/ui/KeycodeLabels.h

Android 4.4在framework/native/include/input/KeyCodelabels.h

Android5.0以后在framework/native/include/input/InputEventLabels.h

(2)定义keyCode

A: native定义(keycodes.h)

enum {

………

AKEYCODE_HELP = 259,

AKEYCODE_CAMERA = 260

};

注:

1)位置:frameworks/base/include/android/keycodes.h

2)此处keycode的定义的值即是 上面key label定义在KEYCODES数组中的位置(index),否则会映射错误

B:JAVA定义(KeyEvent.java定义键值)

public static final int KEYCODE_HELP = 259;

public static final int KEYCODE_CAMERA = 260;

修改LAST_KEYCODE

private static final int LAST_KEYCODE =KEYCODE_CAMERA;

注:

1)位置:frameworks/base/core/java/android/view/KeyEvent.java

2)此处的key code必须与native定义的一致

C:资源文件(attrs.xml)添加keycode

注:

1)位置:frameworks\base\core\res\res\values\attrs.xml

影响到API则需要调用make update-api 然后就可以使用了。

三、问题debug

按键映射出错或unknown,排查步骤如下:

·用 getevent 确认驱动是否报按键值,是否正确

·看kl文件名是否正确?【参见1.2.A】

·看kl文件是否正确加载,dumpsys input 查看KeyLayoutFile是否正确

·看native定义的key code是否与key label 在KEYCODES[]数组的位置对应

·看java层key code定义是否与native定义一致

dumpsys input看KeyLayoutFile如下:

2:abcxxxx

Classes: 0x00000001

Path: /dev/input/event7

Descriptor: 0ea3e722ddb6fa78cd53a54fc262828fb3df6ca7

Location: ALSA

ControllerNumber: 0

UniqueId:

Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000

KeyLayoutFile:/system/usr/keylayout/abcxxxx.kl

KeyCharacterMapFile: /system/usr/keychars/Generic.kcm

ConfigurationFile:

HaveKeyboardLayoutOverlay: false

如果觉得《增加或修改(键盘)按键》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。