底层按键程序-android版

底层按键程序-android版

ID:32947266

大小:61.39 KB

页数:8页

时间:2019-02-18

底层按键程序-android版_第1页
底层按键程序-android版_第2页
底层按键程序-android版_第3页
底层按键程序-android版_第4页
底层按键程序-android版_第5页
资源描述:

《底层按键程序-android版》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、底层按键程序-Android版一、Android中按键为什么需要进行转换?与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的來源。由于硬件本身的物理特性及由各大硬件厂商的标准不一,这将导致我们从设备上获取到的键值存在一定的差异性,为了让系统能够正确处理用户的操作,我们就必须将从输入设备上获取到的键值正确转换为Android系统定义的键值以便正确处理。二、Android中按键输入转换过程扫描键码Scancode是由Linux的input驱动定义的整形类型,扫描键码根据读取的kl配置文档内容的转化后,形成按键的

2、标签KeycodeLaybeL按键的标签在经过数组KEYCODES的转换后形成keycodeo应用程序对keycode进行处理。Android默认提供的按键布局文件主要包括qwerty.kl和AVRCP.kl(/system/usr/keylayout/目录下)。Qwerty.kl为全键盘的布局文件,是系统中默认使用的布局文件,AVRCP.kl用于多媒体控制。三、Linux中按键定义的数据结构3.1Linux中input_event结构体(定义按键在linux/input.h中)structinput_even

3、t{structtimevaltime;//按键时间—u16type;//类型,在下面有定义—ul6code;//要模拟成什么按键—s32value;//是按下还是释放};1>Code事件的代码•如果事件的类型代码是EV_KEY?该代码code为设备键盘代码.代码值0-127为键盘上的按键代码,0x110-0x116为鼠标上按键代码,其中0xll0(BTN_LEFT)为鼠标左键,Oxlll(BTN_RIGHT)为鼠标右键,0xll2(BTN_MIDDLE)为鼠标中键.如果事件的类型代码是EV_REL,code值

4、表示轨迹的类型•如指示鼠标的X轴方向REL_X(代码为0x00)才旨示鼠标的Y轴方向REL_Y(代码为0x0。指示鼠标中轮子方向REl__WHEEL(代码为0x08).其它代码含义请参看include/linux/input.h文件.2、Type/*Eventtypes参考值*/#defineEV_SYN0x00#defineEV_KEY0x01〃按键常用的用红色标记出来#defineEV_REL0x02〃相对坐标(轨迹球)#defineEV_ABS0x03〃绝对坐标(鼠标)#defineEV_MSC0x04〃

5、其他#defineEVSW0x05#defineEV_LEDOxll//LED#defineEV_SND0x12〃声音#defineEV_REP0xl4//repeat#defineEV_FF0x15#defineEV_PWR0x16#defineEV_FF_STATUS0x17#defineEV_MAXOxlf#defineEV_CNT(EV_MAX+1)3、Value事件的值•如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_REL,value的正数值和负数值分别

6、代表两个不同方向的值.3.2AndroidRawEvent结构体Android中将从底层获取到的按键按照一定规则处理后,用如下结构描述:/*AraweventasretrievedfromtheEventHub.*/structRawEvent{nsecs_twhen;〃时间int32_tdeviceld;〃设备IDint32_ttype;//Keyboard>TouchScreen、TraceBallint32_tscanCode;〃扫描键码int32_tkeyCode;〃按键码int32_tvalue;ui

7、nt32_tflags;};类型,四、Linux层获取event的原理对eventX进行read/write来抓取event的各种信息;1>打开event设备eventO_fd=open(a/dev/input/eventOz,,O_RDWR);2>read设备rd=read(eventO_fd,&eventO,sizeof(structinput__event)*64);3、判断事件类型如果,(event[i].type==3&&event[i].code==0),为鼠标位置的x坐标值

8、;(event[i].type==3&&event[i].code==1),为鼠标位置的y坐标值;女口果,(event[i].type==1&&event[i].value==1),为按下key;(event[i].type==1&&event[i].value==0),为松开key;如果,(event[i].type==其它事件(如轨迹

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。