- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、Android 中按键为什么需要进行转换?
与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的来
与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的来
确处理用户的操作,我们就必须将从输入设备上获取到的键值正确转换为Android 系统定义的键值以便正确处理。源。由于硬件本身的物理特性及由各大硬件厂商的标准不一,这将导致我们从设备上获取到的键值存在一定的差异性,为了让系统能够正
确处理用户的操作,我们就必须将从输入设备上获取到的键值正确转
换为Android 系统定义的键值以便正确处理。
二、Android 中按键输入转换过程
扫描键码Scancode 是由Linux
扫描键码Scancode 是由Linux
的input 驱动定义的整形类型,
扫描键码根据读取的 kl 配置文档内容的转化后,形成按键的标签
KeycodeLaybel。按键的标签在经过数组
KeycodeLaybel。按键的标签在经过数组
KEYCODES 的转换后形成
keycode。应用程序对keycode 进行处理。
Android 默认提供的按键布局文件主要包括qwerty.kl和AVRCP.kl(/system/usr/keylayout/
Android 默认提供的按键布局文件主要包括
qwerty.kl
和
AVRCP.kl(/system/usr/keylayout/目录下)。Qwerty.kl 为全键盘的
布局文件,是系统中默认使用的布局文件, AVRCP.kl 用于多媒体控
制。
三、Linux 中按键定义的数据结构
3.1Linux 中input_event
3.1Linux 中input_event 结构体
(定义按键在
(定义按键在
linux/input.h 中)
struct
struct
input_event
{
struct
struct
timeval
time;
//按键时间
u16
type;
//类型,在下面有定义
u16
code;
//要模拟成什么按键
s32
value;//是按下还是释放
};
};
1、Code
事件的代码.如果事件的类型代码是EV_KEY,该代码code 为设备键盘代码.代码值 0~127 为键盘上的按键代码,0x110~0x116为鼠标上按键代码,其中 0x110(BTN_LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,
事件的代码.如果事件的类型代码是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/input.h 文件.
其它代码含义请参看include/linux/input.h 文件.
2、Type
/*Eventtypes
/*Event
types 参考值*/
#define
EV_SYN
0x00
#define EV_KEY 0x01 //按键 常用的用红色标记出
来
来
#define
EV_REL
0x02
//相对坐标(轨迹球)
#define
EV_ABS
0x03
//绝对坐标(鼠标)
#define
#define
EV_MSC
0x04
//其他
#defineEV_SND0x12//声音#defineEV_REP0x14//repeat#define
#define
EV_SND
0x12//声音
#define
EV_REP
0x14//repeat
#define
EV_FF
0x15
#define EV_PWR 0x16 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f
#define
#define
EV_CNT
(EV_MAX+1)
3、Value
事件的值.如果事件的类型代码是
事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为 1,
松开时值为 0;
如果事件的类型代码是 EV_REL,value 的正数值和负数值分别
如果事件的类型代码是 EV_
REL,value 的正数值和负数值分别
代表两个不同方向的值.
3.2 Android RawEvent 结构体
Android 中将从底层获取到的按键按照一定规则处理后,用如
文档评论(0)