android 添加一个按键键值

本文介绍了在Android系统中如何添加自定义的按键值。主要步骤包括:在键盘布局文件中添加键值映射;在attrs.xml中定义枚举名称及值;在keycodes.h中声明键值;在InputEventLabels.h中定义键值;在KeyEvent.java中添加键值并实现系统键与唤醒功能键判断。

工作中有时会碰到这种添加键值的需求,发现很容易忘。搜索一下果然发现一篇简练的文章,果断保存。

本文来转自http://blog.youkuaiyun.com/u012719256/article/details/52526046

1.frameworks/base/data/keyboards/Generic.kl (键盘布局文件添加键值映射,这里的键值对应kernel里面的键值,按键名字对应上层keycodes.h里面定义的按键名字)
key 497 GESTURE_WAKELOCK

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

enum name="KEYCODE_GESTURE_WAKELOCK" value="267"

3.frameworks\native\include\android\keycodes.h

 AKEYCODE_GESTURE_WAKEUP       =267     

4.frameworks\native\include\input\InputEventLabels.h

DEFINE_KEYCODE(GESTURE_WAKELOCK)   

5.frameworks/base/core/java/android/view/KeyEvent.java
(1)添加键值

    public static final int KEYCODE_GESTURE_WAKELOCK = 267; 

(2)是否为系统按键或者唤醒功能按键

    isSystemKey
    isWakeKey

6.frameworks/base/api/current.txt
frameworks/base/api/system-current.txt

<think>首先,用户的问题是:“我想查找在Android系统中获取物理按键键值的方法”。用户提供了两条引用作为背景: 1. 引用[1] 讨论了在 Android 8.0 中添加物理按键键值的方法,涉及修改文件如 `madev.h` 和 `input-event-codes.h`,并指定键值。 2. 引用[2] 是关于在 Android 6 中添加新物理按键键值的例子,包括提交记录中的一些细节。 用户指定“上述引用仅供参考”,所以我需要基于用户的问题来回答,而不是完全依赖这些引用。用户的核心需求是“获取物理按键键值的方法”,而不是添加键值。 用户的问题是关于“获取”物理按键键值的方法,而引用中讨论的是“添加键值。我需要聚焦于如何获取键值。 回想 Android 系统,物理按键键值通常可以通过事件监听来获取。这涉及到 Android 的 Input 系统。 关键点: - 在 Android 应用中,可以通过覆盖 `onKeyDown` 或 `onKeyUp` 方法来监听按键事件。 - 按键事件包含键值(key code),如 KEYCODE_HOME、KEYCODE_BACK 等。 - 键值定义在 Android SDK 中的 `KeyEvent` 类中,例如 `KeyEvent.KEYCODE_BACK`。 步骤和方法: 1. **在应用层获取键值**: - 在 Activity 中,重写 `onKeyDown` 方法。 - 例如: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d("KeyPress", "Key code: " + keyCode); return super.onKeyDown(keyCode, event); } ``` - 这里 `keyCode` 就是按键键值。 2. **键值定义**: - 键值常量定义在 `android.view.KeyEvent` 类中,如 `KEYCODE_VOLUME_UP` 是 24。 - 开发者可以参考官方文档:[KeyEvent | Android Developers](https://developer.android.com/reference/android/view/KeyEvent) 3. **系统层获取**: - 用户的问题可能涉及更底层的获取,比如在自定义硬件或系统开发中。 - 引用中提到修改 `input-event-codes.h` 等文件,这属于内核层或驱动层的设置。 - 在 Android 系统开发中,键值定义在 Linux 内核的 input 子系统头文件中,如 `/usr/include/linux/input-event-codes.h`。 - 要获取物理按键的原始键值,可能需要使用工具或代码监听输入事件。 - 使用 `getevent` 工具:在 ADB shell 中运行 `getevent` 命令可以显示原始输入事件。 - 例如:`adb shell getevent -l` 显示带上参数的输入事件。 - 输出包括设备路径、类型、代码和。 - 键值对应的是 `EV_KEY` 事件的代码。 4. **用于调试**: - 对于开发者,在调试时,可以使用 `adb shell input keyevent KEY_CODE` 来模拟按键事件。 - 但获取实际键值,监听是更好的方式。 结构化回答: - 先解释在应用层如何获取。 - 然后讨论系统层或底层获取。 - 引用用户提供的引用作为参考,但强调它们是关于添加键值。 - 确保使用正确的格式:行内数学表达式用 `$...$`,独立公式用 `$$...$$`(虽然这里可能不需要数学表达式)。 - 使用中文回答。 - 生成相关问题。 回答框架: 1. **介绍获取方法**:概述在 Android 系统中获取物理按键键值的途径。 2. **应用层方法**:描述如何在应用程序中监听按键事件。 3. **系统层方法**:使用工具如 `getevent` 获取原始键值。 4. **引用相关引用**:提到用户提供的引用是关于添加键值,而不是获取。例如:[^1] 提到修改驱动文件。 5. **生成相关问题**:在末尾添加相关问题。 相关问题: 1. Android应用中如何处理物理按键事件? 2. 如何使用ADB命令模拟按键事件? 3. Android系统开发中如何添加自定义物理按键? 确保回答真实可靠:基于 Android 开发知识。 </think>### Android系统中获取物理按键键值的方法 在Android系统中,获取物理按键键值通常涉及监听输入事件或分析底层事件数据。物理按键键值(Key Code)是系统定义的整数(例如,返回键的键值为4)。以下是详细的获取方法,分为应用层和系统层/底层两种场景。 #### 1. **应用层获取方法(适用于应用开发者)** 在Android应用程序中,可以通过重写按键事件回调方法来获取键值键值定义在 `KeyEvent` 类中(例如 `KeyEvent.KEYCODE_BACK`)。 - **步骤**: - 在Activity中重写 `onKeyDown()` 或 `onKeyUp()` 方法。 - 使用 `KeyEvent.getKeyCode()` 获取键值。 - 示例代码: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.i("KeyPress", "按键键值: " + keyCode); // 输出键值到日志 if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { // 处理音量加键逻辑 } return super.onKeyDown(keyCode, event); } ``` - 常用键值常量(部分): - `KeyEvent.KEYCODE_HOME`:3(主页键) - `KeyEvent.KEYCODE_BACK`:4(返回键) - `KeyEvent.KEYCODE_VOLUME_UP`:24(音量加) - `KeyEvent.KEYCODE_MENU`:82(菜单键)[^1] - **注意事项**: - 某些系统按键(如主页键)可能被系统拦截,无法在应用层直接捕获。 - 完整键值列表参考Android官方文档:[KeyEvent | Android Developers](https://developer.android.com/reference/android/view/KeyEvent)。 #### 2. **系统层/底层获取方法(适用于系统开发者或调试)** 在系统开发或调试阶段,可通过ADB工具或内核事件监听获取原始键值。这涉及Android的Input子系统,键值在内核驱动中定义(如 `/usr/include/linux/input-event-codes.h`)。 - **使用 `getevent` 工具**: - `getevent` 是Android ADB调试命令,直接打印输入设备的原始事件数据。 - 步骤: 1. 连接设备到PC并启用ADB调试。 2. 执行命令: ```bash adb shell getevent -l # -l参数显示可读的标签 ``` 3. 按下物理按键,观察输出: ``` /dev/input/event0: EV_KEY KEY_POWER DOWN # 事件类型、键名、状态 /dev/input/event0: EV_KEY KEY_POWER UP ``` 这里的 `KEY_POWER` 对应键值116(在 `input-event-codes.h` 中定义)[^1][^2]。 - 键值映射:输出中的 `KEY_XXX` 标签对应数键值,可通过头文件查询(如 `grep -r "KEY_POWER" /usr/include/linux/`)。 - **驱动层分析**: - 在Android系统开发中,键值定义在Linux内核头文件(如 `input-event-codes.h`),驱动通过上报事件码(例如 `KEY_MENU`)传递键值。 - 如引用[^1]所述,添加按键时需在 `input-event-codes.h` 或 `madev.h` 中定义键值和名称(例如 `key 645 XXXXXX`),获取时则可直接引用这些。 - 调试方法: - 使用 `dumpsys input` 命令查看输入设备详情。 - 通过修改驱动日志级别(如 `echo 1 > /sys/module/your_driver/parameters/debug`)跟踪事件上报。 #### 注意事项 - **引用说明**:您提供的引用[^1]和[^2]主要讨论添加物理按键键值(如在Android 8.0或6.0中添加驱动定义),而本文聚焦于获取方法。获取时直接监听事件即可,无需修改系统文件。 - **兼容性**:不同Android版本键值定义一致,但系统层工具可能需root权限。 - **推荐场景**: - 应用开发:优先使用 `KeyEvent` 监听。 - 硬件调试:使用 `getevent` 或内核日志。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值