今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点。好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框,提示用户需要打开某些服务,然后出于良好的用户体验,直接模拟点击事件,点击该对话框,不让用户做多余的操作。
但是后期版本的改动,该功能不需要了,但是代码可能没有改动完全,因此出现了上述bug。查看代码发现,原来是执行了下面的代码才模拟出在屏幕上的点击事件。
Runtime.getRuntime().exec("input tap " + mPositiveButtonX + " " + mPositiveButtonY);
其中mPositiveButtonX是要点击的x坐标,mPositiveButtonY是要点击的y坐标。
修复此bug,就是将上述代码处注释掉即可。
===============================================================
通过这段代码,我去百度了input事件的相关资料。
首先在在cmd窗口敲命令:adb shell input help,得到相关的input事件的用法
C:\Documents and Settings\Administrator>adb shell input help
Error: Unknown command: help
Usage: input [<source>] <command> [<arg>...]
The sources are:
mouse
keyboard
joystick
touchnavigation
touchpad
trackball
stylus
dpad
touchscreen
gamepad
The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
如上,input后可以跟很多参数, text相当于输入内容,keyevent相当于手机物理或是屏幕按键,tap相当于touch事件,swipe相当于滑动。下面我们来学习相应的用法。
1、input text用法
C:\Documents and Settings\Administrator>adb shell
shell@lentk6735_66t_l1:/ $ input text OuyangPeng
如果你此时鼠标是在一个可以输入文本的文本框之类的控件上,那么将在该文本框上输入出 OuyangPeng 字符串。如下图所示:
2、 input keyevent用法
先列举 input keyevent 几个比较常用的code值:
input keyevent 3 // Home
input keyevent 4 // Back
input keyevent 19 //Up
input keyevent 20 //Down
input keyevent 21 //Left
input keyevent 22 //Right
input keyevent 23 //Select/Ok
input keyevent 24 //Volume+
input keyevent 25 // Volume-
input keyevent 82 // Menu 菜单
下面来测试一下:
shell@lentk6735_66t_l1:/ $ input keyevent 3
看看,手机是不是回到了主界面。
shell@lentk6735_66t_l1:/ $ input keyevent 24
上面是进行音量的加大。此时会弹出音量加减界面,如下所示。
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
shell@lentk6735_66t_l1:/ $ input keyevent 25
上面是进行音量的减小,执行了几次之后,音量减小到了中间位置。此时会弹出音量加减界面,如下所示。
3、input tab用法
首先进入到下面界面如下所示:
然后通过input tap命令模拟触摸屏幕,代码如下。
shell@lentk6735_66t_l1:/ $ input tap 600 800
其中X坐标600,Y坐标800正好在“收音机”图标所在区域,因此执行上述代码后,会进入“收音机”应用。
4、input swipe用法
input swipe模拟的是滑动事件,input swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen),需要将起始的坐标传进去。如下面代码,将会向