Android 中如何添加新的键值

转自:http://www.eoeandroid.com/forum-viewthread-tid-69912-fromuid-106432.html   2011-04-20   14:06:03

在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个 新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?

这里以imx515平台为例来说明

 

对keypad来说,涉及到的文件有以下几个:

 

1.vendor/fsl/imx51_BBG/mxckpd.kl

 

首先在此文件中,添加新的键值信息:

 

Example:

key 59    OFFHOOK
key 60    ONHOOK
key 61    HANDFREE
key 62    PSTNCALLIN

 

注意:新加的键值不要与已有的重复。

2. kernel_imx/drivers/input/keyboard/imx51-key.c

 

在键盘驱动中定义相应的键盘扫描码:

 

 


 

3.  在frameworks/base/include/ui/KeycodeLabels.h

(1)在数组keycodes 中添加 新定义的信息,要在{NULL, 0}之前添加

(2)枚举类型 KeyCode 中添加

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

添加如下:

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

注意:private static final int LAST_KEYCODE    = KEYCODE_MUTE;    应改为:private static final int LAST_KEYCODE     = KEYCODE_PSTNCALLIN;

在函数 public final boolean isSystem() 中,同样需要添加:

通过以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API,所以需要make update-api

如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理.

6.   frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事 件信息进行合理化处理。

注:
vendor/fsl/imx51_BBG/mxckpd.kl 是专门给imx515输入设备使用的keylayout文 件,所以修改mxckpd.kl 文件只是给键盘输入增加键值。如果是其他设备的输入, 如x_input,而且当没有x_iput.kl存在的时候,那么默认的kl文件就是 qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl)

这个很重要。也就是说需要实现明白添加的键值是否是mxckpd.kl的input event

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题比较复杂,需要分步骤来回答。下面是大致的流程和代码: 1. 添加键值Android 系统添加键值需要修改内核代码。在内核找到 keyboard.h 文件,添加一个键值,例如: ``` #define KEY_F1 59 ``` 2. 修改驱动 修改键盘驱动程序来处理添加键值。在驱动程序找到处理键盘输入的函数,通常是 input_event 函数。在该函数添加键值的处理,例如: ``` static void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { if (code == KEY_F1) { // 处理 F1 按键 } // 处理其他按键 } ``` 3. 上报按键事件到用户空间 在驱动程序上报键值的按键事件到用户空间。在 input_event 函数,使用 input_report_key 函数上报按键事件: ``` static void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { if (code == KEY_F1) { input_report_key(dev, code, value); input_sync(dev); } // 处理其他按键 } ``` 4. 注册输入设备 在驱动程序注册输入设备。在驱动程序的 probe 函数注册输入设备,例如: ``` static int keyboard_probe(struct platform_device *pdev) { struct input_dev *input_dev; int err; input_dev = input_allocate_device(); if (!input_dev) { dev_err(&pdev->dev, "input_allocate_device failed\n"); return -ENOMEM; } input_dev->name = "My Keyboard"; input_dev->phys = "mykeyboard/input0"; input_dev->id.bustype = BUS_HOST; input_dev->id.vendor = 0x0001; input_dev->id.product = 0x0001; input_dev->id.version = 0x0100; set_bit(EV_KEY, input_dev->evbit); set_bit(KEY_F1, input_dev->keybit); err = input_register_device(input_dev); if (err) { dev_err(&pdev->dev, "input_register_device failed\n"); input_free_device(input_dev); return err; } platform_set_drvdata(pdev, input_dev); return 0; } ``` 5. 编译内核并安装 编译内核并安装到 Android 系统。 6. 测试 使用 Android 系统的输入法或其他应用程序测试添加键值是否能够被识别。例如,在文本编辑器按下 F1 按键,应该能够输入字符或执行相应的操作。 以上是大致的流程和代码示例,具体实现可能需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值