我的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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
5月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
139 0
|
5月前
|
Java Android开发
全志 Android 11:实现响应全局按键
本文介绍了在全志平台Android 11上实现响应全局按键的方法,通过修改`TvWindowManager.java`来全局拦截特定的热键事件,并在`FocusActivity`中处理这些事件以启动调焦界面和控制步进电机调整焦距。
57 2
|
5月前
|
Android开发
Android使用ViewPager做无限轮播,人为滑动时停止
Android使用ViewPager做无限轮播,人为滑动时停止
103 2
|
6月前
|
Android开发
Android仿高德首页三段式滑动
Android仿高德首页三段式滑动
181 0
|
8月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
415 5
|
7月前
|
存储 算法 Java
Android 进阶——代码插桩必知必会&ASM7字节码操作
Android 进阶——代码插桩必知必会&ASM7字节码操作
350 0
|
7月前
|
编解码 Android开发
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
132 0
|
8月前
|
Android开发
Android使用ViewPager实现图片轮播系列之三:手动滑动 + 左右箭头(1)
Android使用ViewPager实现图片轮播系列之三:手动滑动 + 左右箭头(1)
|
8月前
|
缓存 网络协议 Java
挑战全网,史上最全Android开发进阶,跳槽复习指南(1),掌握这6大技能体系
挑战全网,史上最全Android开发进阶,跳槽复习指南(1),掌握这6大技能体系
|
7月前
|
XML Android开发 UED