Android Input keycode &scanCode

本文深入解析了Android系统中键值对接的过程,详细介绍了ScanCode与KeyCode的对应关系,以及如何通过KeycodeLabels.h文件查询键码。同时,文章还提供了kl文件的添加方法,为开发者提供了实用的操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

键值对接

涉及到的文件:

  1. frameworks/native/include/input/KeycodeLabels.h
  2. external/kernel-headers/original/linux/input.h
ScanCode &KeyCode的对应关系

主要log如下:

D/InputReader( 3795): deviceId 1
D/InputReader( 3795): Input event: device=1 type=0x0001 code=0x00ac value=0x00000001 when=563708568000
D/KeyCharacterMap( 3795): mapKey: scanCode=172, usageCode=0x00000000 ~ Failed.
D/KeyLayoutMap( 3795): mapKey: scanCode=172, usageCode=0x00000000 ~ Result keyCode=3, outFlags=0x00000000.
D/InputReader( 3795): scanCode 172, usageCode 0 keyCode 3
D/InputReader( 3795): call keyboard process
D/InputReader( 3795): notifykey in KeyboardInputMapper
D/InputReader( 3795): Input event: device=1 type=0x0000 code=0x0000 value=0x00000000 when=563708568000
D/InputDispatcher( 3795): notifyKey - eventTime=563708568000, deviceId=1, source=0x301, policyFlags=0x0, action=0x0, flags=0x8, keyCode=0x3, scanCode=0xac, metaState=0x0, downTime=563708568000

设备接收到的是ScanCode &Device id。之后将会根据device ID寻找对应的设备。在此次分析的设备中对应的layout为:Vendor_0001_Product_0001.kl
下面截取的文件内容如下:

关键字 ScanCode label
key      172     HOME

文件内容格式为:关键字 ScanCode Label。注意之间用空格隔开。
根据上面的log看出,收到的scancode为172,之后根据scancode就能查询到对应的label,在这面就是“HOME”。
之后再根据label查找frameworks/native/include/input/KeycodeLabels.h文件中的数组。
KeycodeLabels.h文件中相关内容如下:

static const KeycodeLabel KEYCODES[] = {
···
{ "HOME", 3 },
···

从这个地方就能够查询到对应的keycode为3.
之后再把keycode返回给framework层。

其他

以下是从网络抓取的内容,还没进行验证。
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

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值