好久没来更新文章了,因为没有找到自己的博客地址。。。我也说不清楚是怎么回事,几乎把所有的用户名密码都试过来了,就是没有找到,忽然间又找到了,神奇^-^
写的不好,但也不想就此荒芜,继续更新!希望对你有用。
看这篇文章的同学们应该对getevent,sendevent这两个命令比较熟吧,我就不罗嗦了,还不熟悉的同学可以自己查一下。
一、Android中按键为什么需要进行转换?
与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的来源。由于硬件本身的物理特性及由各大硬件厂商的标准不一,这将导致我们从设备上获取到的键值存在一定的差异性,为了让系统能够正确处理用户的操作,我们就必须将从输入设备上获取到的键值正确转换为Android系统定义的键值以便正确处理。
二、Android中按键输入转换过程
扫描键码Scancode是由Linux 的input驱动定义的整形类型,扫描键码根据读取的kl配置文档内容的转化后,形成按键的标签KeycodeLaybel。按键的标签在经过数组KEYCODES的转换后形成keycode。应用程序对keycode进行处理。
Android默认提供的按键布局文件主要包括qwerty.kl 和AVRCP.kl(/system/usr/keylayout/目录下)。Qwerty.kl为全键盘的布局文件,是系统中默认使用的布局文件,AVRCP.kl用于多媒体控制。
三、Linux中按键定义的数据结构
3.1 Linux中input_event结构体
(定义按键在 linux/input.h中)
struct input_event {
struct timeval time; //按键时间
__u16 type; //类型,在下面有定义
__u16 code; //要模拟成什么按键
__s32 value;//是按下还是释放
};
1、Code
事件的代码.如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.
代码值0~127为键盘上的按键代码,0x110~0x116 为鼠标上按键代码,
其中0x110(BTN_ LEFT)为鼠标左键,
0x111(BTN_RIGHT)为鼠标右键,
0x112(BTN_ MIDDLE)为鼠标中键.
如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方向REL_X(代码为0x00),指示鼠标的Y轴方向REL_Y(代码 为0x01),指示鼠标中轮子方向REL_WHEEL(代码为0x08).
其它代码含义请参看include/linux/inp