我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点。好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框,提示用户需要打开某些服务,然后出于良好的用户体验,直接模拟点击事件,点击该对话框,不让用户做多余的操作。

今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的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),需要将起始的坐标传进去。


如下面代码,将会向左滑动

shell@lentk6735_66t_l1:/ $ input swipe 600 800 300 800
如下面代码, 将会向右滑动

shell@lentk6735_66t_l1:/ $ input swipe 300 800 600 800



附录 :input keyevent值所对应的字符

0 -->  "KEYCODE_UNKNOWN"

1 -->  "KEYCODE_MENU"

2 -->  "KEYCODE_SOFT_RIGHT"

3 -->  "KEYCODE_HOME"

4 -->  "KEYCODE_BACK"

5 -->  "KEYCODE_CALL" 

6 -->  "KEYCODE_ENDCALL" 

7 -->  "KEYCODE_0" 

8 -->  "KEYCODE_1" 

9 -->  "KEYCODE_2" 

10 -->  "KEYCODE_3"

11 -->  "KEYCODE_4" 

12 -->  "KEYCODE_5" 

13 -->  "KEYCODE_6" 

14 -->  "KEYCODE_7" 

15 -->  "KEYCODE_8" 

16 -->  "KEYCODE_9" 

17 -->  "KEYCODE_STAR" 

18 -->  "KEYCODE_POUND" 

19 -->  "KEYCODE_DPAD_UP" 

20 -->  "KEYCODE_DPAD_DOWN" 

21 -->  "KEYCODE_DPAD_LEFT" 

22 -->  "KEYCODE_DPAD_RIGHT"

23 -->  "KEYCODE_DPAD_CENTER"

24 -->  "KEYCODE_VOLUME_UP" 

25 -->  "KEYCODE_VOLUME_DOWN" 

26 -->  "KEYCODE_POWER" 

27 -->  "KEYCODE_CAMERA" 

28 -->  "KEYCODE_CLEAR" 

29 -->  "KEYCODE_A" 

30 -->  "KEYCODE_B" 

31 -->  "KEYCODE_C" 

32 -->  "KEYCODE_D" 

33 -->  "KEYCODE_E" 

34 -->  "KEYCODE_F" 

35 -->  "KEYCODE_G" 

36 -->  "KEYCODE_H" 

37 -->  "KEYCODE_I" 

38 -->  "KEYCODE_J" 

39 -->  "KEYCODE_K" 

40 -->  "KEYCODE_L" 

41 -->  "KEYCODE_M"

42 -->  "KEYCODE_N" 

43 -->  "KEYCODE_O" 

44 -->  "KEYCODE_P" 

45 -->  "KEYCODE_Q" 

46 -->  "KEYCODE_R" 

47 -->  "KEYCODE_S" 

48 -->  "KEYCODE_T" 

49 -->  "KEYCODE_U" 

50 -->  "KEYCODE_V" 

51 -->  "KEYCODE_W" 

52 -->  "KEYCODE_X"

53 -->  "KEYCODE_Y" 

54 -->  "KEYCODE_Z" 

55 -->  "KEYCODE_COMMA" 

56 -->  "KEYCODE_PERIOD"

57 -->  "KEYCODE_ALT_LEFT" 

58 -->  "KEYCODE_ALT_RIGHT" 

59 -->  "KEYCODE_SHIFT_LEFT" 

60 -->  "KEYCODE_SHIFT_RIGHT" 

61 -->  "KEYCODE_TAB" 

62 -->  "KEYCODE_SPACE" 

63 -->  "KEYCODE_SYM" 

64 -->  "KEYCODE_EXPLORER" 

65 -->  "KEYCODE_ENVELOPE" 

66 -->  "KEYCODE_ENTER" 

67 -->  "KEYCODE_DEL" 

68 -->  "KEYCODE_GRAVE" 

69 -->  "KEYCODE_MINUS" 

70 -->  "KEYCODE_EQUALS" 

71 -->  "KEYCODE_LEFT_BRACKET" 

72 -->  "KEYCODE_RIGHT_BRACKET" 

73 -->  "KEYCODE_BACKSLASH"

74 -->  "KEYCODE_SEMICOLON" 

75 -->  "KEYCODE_APOSTROPHE"

76 -->  "KEYCODE_SLASH" 

77 -->  "KEYCODE_AT" 

78 -->  "KEYCODE_NUM" 

79 -->  "KEYCODE_HEADSETHOOK" 

80 -->  "KEYCODE_FOCUS"

81 -->  "KEYCODE_PLUS"

82 -->  "KEYCODE_MENU"

83 -->  "KEYCODE_NOTIFICATION"

84 -->  "KEYCODE_SEARCH" 

85 -->  "TAG_LAST_KEYCODE" 


                 ====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

====================================================================================


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
544 1
|
6月前
|
安全 Shell Android开发
Android系统 init.rc开机执行shell脚本
Android系统 init.rc开机执行shell脚本
1108 0
|
3月前
|
Java Android开发
全志 Android 11:实现响应全局按键
本文介绍了在全志平台Android 11上实现响应全局按键的方法,通过修改`TvWindowManager.java`来全局拦截特定的热键事件,并在`FocusActivity`中处理这些事件以启动调焦界面和控制步进电机调整焦距。
35 2
|
4月前
|
测试技术 Android开发
Android中使用performClick触发点击事件
Android中使用performClick触发点击事件
|
5月前
|
Shell 开发工具 Android开发
|
6月前
|
存储 安全 Shell
Android系统 adb shell auth授权使用
Android系统 adb shell auth授权使用
458 2
|
6月前
|
安全 Java Shell
Android13 adb input 调试命令使用和源码解析
Android13 adb input 调试命令使用和源码解析
775 0
|
6月前
|
传感器 Java API
Android Input系统(1) Input事件的产生与传递
Android Input系统(1) Input事件的产生与传递
308 0
|
6月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 显示或设置键盘按键与其相关的功能 bind命令 使用指南
【Shell 命令集合 系统设置 】Linux 显示或设置键盘按键与其相关的功能 bind命令 使用指南
78 0
|
6月前
|
XML 监控 Java
Android App开发之事件交互Event中检测软键盘和物理按键讲解及实战(附源码 演示简单易懂)
Android App开发之事件交互Event中检测软键盘和物理按键讲解及实战(附源码 演示简单易懂)
718 0