HTC Sensation 事件操作.

来源:互联网 发布:java获取天气预报 编辑:程序博客网 时间:2024/05/11 20:18

真机于模拟器的区别是,网上一大堆的说明,操作方法都是针对的模拟器,用到真机上,不起作用了.

一般模拟器的事件就一个.

模拟器获取事件信息

root@generic:/ # geteventadd device 1: /dev/input/event0  name:     "qwerty2"
就一个/dev/input/event0  因此能搜到的文章都是写的event0

真机就比较多了,如我的这个HTC

有8个设备

# geteventadd device 1: /dev/input/event6  name:     "proximity"add device 2: /dev/input/event5  name:     "lightsensor-level"add device 3: /dev/input/event4  name:     "dummy_keypad"add device 4: /dev/input/event3  name:     "pyramid-keypad"add device 5: /dev/input/event2  name:     "cy8c-touchscreen"add device 6: /dev/input/event1  name:     "rcp_events"add device 7: /dev/input/event0  name:     "h2w headset"add device 8: /dev/input/event7  name:     "htc_headset"

需要给手机发送指令,那么就需要知道你摸了手机,是哪个设备相应的

通过getevent很容易

用手点了下

/dev/input/event2: 0003 0030 00000040/dev/input/event2: 0003 0032 00000040/dev/input/event2: 0003 0035 00000196/dev/input/event2: 0003 0036 000002e5/dev/input/event2: 0000 0002 00000000/dev/input/event2: 0000 0000 00000000

输出一大堆event2 那么接受点击的就是 /dev/input/event2 这个设备了

点了下开机键

/dev/input/event3: 0001 0074 00000001
/dev/input/event3: 0001 0074 00000000

输出了event3 那么开机键关联的就是 /dev/input/event3 这个设备了


手机的分辨率是540 960

按照这个尺寸获取坐标小心,发送sendevent 是不对的.

通过getevent -p 获取event2的参数信息

add device 5: /dev/input/event2  name:     "cy8c-touchscreen"  events:    SYN (0000): 0000  0001  0003     KEY (0001): 0066  008b  009e  00d9     ABS (0003): 0030  value 0, min 0, max 255, fuzz 0 flat 0                0032  value 0, min 0, max 512, fuzz 0 flat 0                0035  value 0, min 11, max 1012, fuzz 0 flat 0                0036  value 0, min 6, max 940, fuzz 0 flat 0

0035的值范围是 11 ---- 1012

540这个尺寸需要调整下按比例缩放.

540/1001 + 11 才是实际映射到事件的尺寸.

通过 getevent -t 查看手机接受的事件信息

25804-683810: /dev/input/event5: 0003 0028 0000000225804-684206: /dev/input/event5: 0000 0000 0000000025805-734866: /dev/input/event2: 0003 0030 0000003c25805-737734: /dev/input/event2: 0003 0032 0000003c25805-737795: /dev/input/event2: 0003 0035 0000022125805-737856: /dev/input/event2: 0003 0036 0000012025805-737917: /dev/input/event2: 0000 0002 0000000025805-737978: /dev/input/event2: 0000 0000 00000000

事件发送的速度是很快的,是在同意秒内进行处理,

所以你发送sendevent 是跟不上这个节奏的,如果要进行划屏的操作,那么一个一个的发送指令,执行时就成了长按效果了.

因此网上的一堆指令发送是达不到想象的效果的.

非要达到这个效果,那么需要把指令错开,并发执行.

XXXXXXXXXXXXXXXXXX &

sleep XXX

一般通过这样子来模拟并发并且有间隔,但是因为执行时间不固定,因此也还是会存在指令错位导致的异常.

还有一种功能就是通过直接在设备上安装代理,通过agent的方式发送keyevent的方法进行,不过这样实现较复杂.

对于android更高版本的系统input会支持更多的参数,此类设备比较好实现,也不会存在等版本android指令不知道导致使用折中方法导致的问题.