input
是Android系统中的一个特殊的命令,用于模拟遥控器、键盘、鼠标的各种按键操作。我们都知道Android是阉割版本的Linux系统,Linux中很多命令在Android系统中是没有的。但是他们之间并没有包含的关系,Android系统中有些特有的东西(命令、属性)在Linux中也是没有的。
可以通过which
命令查看该命令的位置:
130|superli:/ # which -a input
/system/bin/input
superli:/ #
使用help
命令查看命令如何使用:
root@hwH30-U10:/ # input --help
Error: Unknown command: --help
usage: input ...
input text
input keyevent
input [touchscreen|touchpad] tap
input [touchscreen|touchpad] swipe
input trackball press
input trackball roll
root@hwH30-U10:/ #
使用help
命令查看命令如何使用:
130|superli:/ # input --help
Error: Unknown command: --help ## 未知命令?为什么会出现这个???算了,不重要,可能系统抽风了。
Usage: input [<source>] [...]
The sources are: ##模拟的输入设备类型
keyboard
mouse
joystick
touchnavigation
touchpad
trackball
dpad
stylus
gamepad
touchscreen
The commands and default sources are: ## 不指定source时,命令的默认输入设备类型为:
text (Default: touchscreen)
keyevent [--longpress] ... (Default: keyboard)
tap (Default: touchscreen)
swipe [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll (Default: trackball)
superli:/ #
后续内容主要分析Android 4.4+版本关于input命令的使用,当然4.4以前的版本也可以参考,毕竟差别并不是很大。
命令格式:input [
命令格式(中文版):input [<设备类型(可选)>] <命令> [<参数(可选)>...]
命令格式中可以看到有两个可选的部分:
sources | 模拟的输入设备类型 |
---|---|
keyboard | 键盘 |
mouse | 鼠标 |
joystick | 操纵杆(玩过游戏手柄的同学应该懂吧) |
touchnavigation | ??触摸导航?? |
touchpad | 触摸板 |
trackball | 轨迹球(啥意思?) |
dpad | 什么鬼 |
stylus | 触控笔(styluses) |
gamepad | 游戏手柄 |
touchscreen | 触摸屏 |
设备类型还挺丰富的,好多普通人根本接触不到,哎,我就是普通人。
命令 | 默认设备类型 | 示例 |
---|---|---|
text | touchscreen | input text "hello" |
keyevent [–longpress] | keyboard | input keyevent 4 |
tap | touchscreen | input tap 500 500 |
swipe [duration(ms)] | touchscreen | input swipe 500 500 600 500 200 |
press | trackball | input press |
roll | trackball | input roll 500 500 |
命令列表中,关于press
和roll
都是针对触控球的设备设计的,因为手中没有设备,而且这种设备现实中使用的比较少,所以就不做演示
该命令用于模拟触摸屏的虚拟键盘输入字符串。
比如,下面使用命令输入“hello”:
HWVKY:/ $ input text hello
text命令后面的字符都会以字符串的形式输入,如果恰好设备的焦点在一个可输入控件(通常为EditText
)中,那么可输入控件中就会出现“hello”字样。
如果命令执行后,“hello”并没有显示,请检查一下控件是否有限定输入类型。
该命令用以默认按键输入,对应的输入设备场景可能是遥控器、键盘等。
例如,下面使用命令模拟遥控器的返回键:
HWVKY:/ $ input keyevent 4
命令执行后,设备中能很明显的看到有回退动作。命令中的参数“4”,对应的是keyevent中的返回键。下面列出部分常用keyevent事件的键值列表。
Keyevent | value | 备注 |
---|---|---|
KEYCODE_BACK | 4 | 返回键 |
KEYCODE_HOME | 3 | HOME键 |
KEYCODE_MENU | 82 | 菜单键 |
KEYCODE_DPAD_UP | 19 | 上 |
KEYCODE_DPAD_DOWN | 20 | 下 |
KEYCODE_DPAD_LEFT | 21 | 左 |
KEYCODE_DPAD_RIGHT | 22 | 右 |
KEYCODE_DPAD_CENTER | 23 | OK键 |
KEYCODE_VOLUME_UP | 24 | 音量+ |
KEYCODE_VOLUME_DOWN | 25 | 音量- |
如果列表中不满足你的需求,可以去android.view.KeyEvent.java
中查看
该命令用于模拟触摸操作,感觉就是点击一下指定位置,可以让指定的点变相的获取焦点。
例如,下面的命令,如果位于首页,500*500的坐标处恰好有一个应用图标,那么命令执行后,会打开该应用:
HWVKY:/ $ input tap 500 500
该命令用于模拟手势滑动操作
例如,下面的命令模拟,从500*500
的坐标滑动到600*500
的位置:
HWVKY:/ $ input swipe 500 500 600 500
上边的命令执行后,屏幕瞬间就会滑动,那么我要慢慢的滑动怎么办呢,看下面的命令:
HWVKY:/ $ input swipe 500 500 600 500 500
两个命令的区别在于第二个多了一个参数,该参数表示该滑动需要执行的时长为500ms。
值得一提的是,当参数中的两个坐标点使用一个点时,秒变长按事件:
HWVKY:/ $ input swipe 500 500 500 500 1000
该命令表示:长按坐标为500*500
的点1秒钟。