一、应用中模拟物理和屏幕点击事件

例如,模拟对某个view的点击事件

private void simulateClick(View view, float x, float y) {long downTime = SystemClock.uptimeMillis();final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_DOWN, x, y, 0);downTime += 1000;final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_UP, x, y, 0);view.onTouchEvent(downEvent);view.onTouchEvent(upEvent);downEvent.recycle();upEvent.recycle();
}public void setMouseClick(int x, int y){  MotionEvent evenDownt = MotionEvent.obtain(System.currentTimeMillis(),  System.currentTimeMillis() + 100, MotionEvent.ACTION_DOWN, x, y, 0);  dispatchTouchEvent(evenDownt);  MotionEvent eventUp = MotionEvent.obtain(System.currentTimeMillis(),  System.currentTimeMillis() + 100, MotionEvent.ACTION_UP, x, y, 0);  dispatchTouchEvent(eventUp);  evenDownt.recycle();  eventUp.recycle();
}

这实现原理就是模拟两个MotionEvent (按下和提起) 然后用一个View 来处理这个Event 。

二、Instrumentation实现模拟键盘鼠标事件

// 可以不用在 Activity 中增加任何处理,各 Activity 都可以响应
Instrumentation inst = new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),   MotionEvent.ACTION_DOWN, 200, 500, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),   MotionEvent.ACTION_UP, 200, 500, 0));

三、系统中模拟物理和屏幕点击事件

1、adb shell 进入手机命令行 
2、getevent -h 用法说明

shell@hwH60:/ $ getevent -h  Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]-t: show time stamps-n: don't print newlines-s: print switch states for given bits-S: print all switch states-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)-d: show HID descriptor, if available-p: show possible events (errs, dev, name, pos. events)-i: show all device info and possible events-l: label event types and names in plain text-q: quiet (clear verbosity mask)-c: print given number of events then exit-r: print rate events are received

[-t] 参数显示事件的时间戳 
[-n] 取消事件显示时的换行符 
[-s switchmask] 得到指定位的开关状态 
[-S] 得到所有开关的状态 
[-v [mask]] 根据mask的值显示相关信息 
[-p] 显示每个设备支持的事件类型和编码 
[-q] 只显示事件数据 
[-c count] 只显示count次事件的数据 
[-r] 显示事件接收频率

3、getevent -p 显示出来当前系统存在的所有input设备,并且把每个设备支持的事件类型以及编码

shell@hwH60:/ $ getevent -padd device 1: /dev/input/event2name:     "hi6421_on"events:KEY (0001): 0074 input props:<none>
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 2: /dev/input/event4name:     "huawei,touchscreen"events:KEY (0001): 003b  003c  003d  003e  003f  0040  0041  0042 0043  0044  0057  00bd  00be  00bf  00c0  00c1 0145  014a ABS (0003): 0000  : value 0, min 0, max 1079, fuzz 0, flat 0, resolution 00001  : value 0, min 0, max 1919, fuzz 0, flat 0, resolution 00018  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 00030  : value 0, min 0, max 15, fuzz 0, flat 0, resolution 00035  : value 0, min 0, max 1079, fuzz 0, flat 0, resolution 00036  : value 0, min 0, max 1919, fuzz 0, flat 0, resolution 00039  : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0003a  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0input props:INPUT_PROP_DIRECT
add device 3: /dev/input/event0name:     "mhl_rcp_dev"events:KEY (0001): 0002  0003  0004  0005  0006  0007  0008  0009 000a  000b  000e  001c  0034  003b  003c  003d 003e  003f  0067  0069  006a  006c  0071  0072 0073  0077  0080  008b  009e  009f  00a1  00a4 00a5  00a7  00a8  00ae  00c8  00c9  00cf  00d0 00d5  00e8  0161  0163  0192  0193  019c input props:<none>
could not get driver version for /dev/input/mice, Not a typewriter
add device 4: /dev/input/event1name:     "hisi_gpio_key.14"events:KEY (0001): 0072  0073 input props:<none>
add device 5: /dev/input/event3name:     "hi3630_hi6401_CARD Headset Jack"events:KEY (0001): 0072  0073  00e2 SW  (0005): 0002  0004 input props:<none>

4、getevent 查看输入设备和查看事件 
打印输出log日志,等待输入设备,我们触摸屏幕或是手机物理按键,便会看到这里的变化

shell@hwH60:/ $ getevent例如:
/dev/input/event0: 0001 014a 00000001
/dev/input/event0: 0003 0000 000000f6
/dev/input/event0: 0003 0001 000002ed
/dev/input/event0: 0003 0035 000000f6
/dev/input/event0: 0003 0036 000002ed
/dev/input/event0: 0003 0032 00000001
/dev/input/event0: 0003 0039 00000000
/dev/input/event0: 0003 003a 00000043
/dev/input/event0: 0000 0002 00000000

他们四个参数对应的是device type code value 
device:指的是处理触摸和按键的输入设备。 
type:指的是事件类型,EV_SYN [0000] (同步事件),EV_KEY [0001] (按键事件),EV_ABS [0003] (绝对值事件) 
code 指的是前面type代表的事件中支持的编码。 
value 指的是值。

例如:需要模拟一次点击BACK键,模拟点击的功能通常都是使用 /dev/input/event0 这个输入设备,back键的类型为 0001(按键事件),BACK的编码为 0x9e 转换为十进制后即158

注意的是在getevent中code显示的是十六进制,而sendevent时需要用十进制

那我们输入如下命令即可模拟一次BACK键的按下和弹起:

adb shell sendevent /dev/input/event0 1 158 1
adb shell sendevent /dev/input/event0 1 158 0

5、input keyevent 命令

先列举 input keyevent 几个比较常用的code值:

input keyevent 3    // Homeinput keyevent 4    // Backinput keyevent 19  //Upinput keyevent 20  //Downinput keyevent 21  //Leftinput keyevent 22  //Rightinput keyevent 23  //Select/Okinput keyevent 24  //Volume+input keyevent 25  // Volume-input keyevent 82  // Menu 菜单

例如: 
点击back键

shell@hwH60:/ $ input keyevent 3 

input text 命令 
输入框输入内容的。后面参数为 “字符串”,例如输入”helloworld”字符串

shell@hwH60:/ $ input text "helloworld!"

input tap 命令 
模拟单击事件 后面参数为: x y ,例如点击(168,252)位置

shell@hwH60:/ $ input tap 168 252  

input swipe 命令 
此命令为滑动事件。例如:从 30 10 滑动到 30 100

shell@hwH60:/ $ input swipe 30 10 30 100

Android代码实现,注意需要root

private void execShellCmd(String cmd) {  try {  // 申请获取root权限,这一步很重要,不然会没有作用  Process process = Runtime.getRuntime().exec("su");  // 获取输出流  OutputStream outputStream = process.getOutputStream();  DataOutputStream dataOutputStream = new DataOutputStream(  outputStream);  dataOutputStream.writeBytes(cmd);  dataOutputStream.flush();  dataOutputStream.close();  outputStream.close();  } catch (Throwable t) {  t.printStackTrace();  }
}
execShellCmd("getevent -p");
execShellCmd("sendevent /dev/input/event0 1 158 1");
execShellCmd("sendevent /dev/input/event0 1 158 0");
execShellCmd("input keyevent 3");//home
execShellCmd("input text  'helloworld!' ");
execShellCmd("input tap 168 252");
execShellCmd("input swipe 100 250 200 280");
<uses-permission android:name = "android.permission.INJECT_EVENTS"/>

Android代码模拟物理、屏幕点击事件 、APP内部自动点击相关推荐

  1. Android代码模拟物理、屏幕点击事件

    一.应用中模拟物理和屏幕点击事件 例如,模拟对某个view的点击事件 private void simulateClick(View view, float x, float y) {long dow ...

  2. Android 代码模拟物理按键的几种方式

    一,通过AccessibilityService实现 简介 AccessibilityService其实是一个Servic,是其子类:设计AccessibilityService的初衷在于帮助残障用户 ...

  3. Android 自动点击工具,自动点击器app下载-自动点击工具 安卓版v1.0.2-PC6安卓网

    自动点击工具app是一款非常不错的系统工具类手机软件,有了自动点击工具app,你将从此释放双手进行抢购,还在等什么?下载自动点击工具app试试吧! 软件介绍 自动点击工具是一款记录手势和点击操作轨迹的 ...

  4. android水波纹动画制作,Framer之事件 | 如何制作安卓点击水波纹效果?

    之前的 Framer 教程都是按照个人喜好去写的,没有按照难易程度形成系列.为了让大家能更好地入门,我准备由易到难写一个系列教程,尽量保持在每周一篇的频率. 导读:事件是 Framer 中的一个重要概 ...

  5. button layui 点击事件_Layui 带多选框表格监听事件以及按钮自动点击写法实例

    不话不多说了,直接上代码吧: 获取选中行数据 获取选中数目 验证是否全选 提交选择 id运动名运动时长运动类型 var msg=""; var idlist="" ...

  6. 微信小程序只允许触发一次点击事件(防止多次点击事件)

    微信小程序只允许触发一次点击事件(防止多次点击事件) 超级简单 容易理解 可以让绑定的事件只触发一次 //.wxml <button bindtap="click1"> ...

  7. vue、uniapp 小程序点击事件禁止多次点击方法封装

    vue.uniapp 小程序点击事件禁止多次点击方法封装 在写uniapp 小程序时发现个bug,疯狂点击按钮第一点击事件还没执行完就疯狂多次调用该事件,很是影响用户体验以及消耗性能,所以这里我封装个 ...

  8. UE4 鼠标点击事件 || 虚幻4 鼠标点击事件

    UE4  鼠标点击事件||虚幻4  鼠标点击事件 一 .预备工作 1. 打开关卡蓝图 2.在关卡蓝图中进行下列操作 二.静态网格物体的点击事件 1. 将静态网格物体拖拽到场景中,右击 进行如图操作 选 ...

  9. Linux程序之触摸,Android(Linux)模拟按键、触摸屏等事件

    前提: 在我们应用程序或者在写Android自动化测试时候常常会需要模拟实体按键,来给我们做测试用.这也是我要整理的目的.主要的涉及的是Linux Input Event事件.以下的例子基于Andro ...

最新文章

  1. LTE PUCCH Format1
  2. 凸透镜成像实验软件_中考物理凸透镜成像难点解析
  3. 纯JSP实现简单登录跳转
  4. android 实现模拟加载中的程序
  5. OPCClient远程连接OPC服务器配置手册 【转】
  6. ftp 工具_ftp工具软件,五大站长们都爱的ftp工具软件
  7. 计算机基本网络测试命令实验报告,网络连通性测试与网络命令验证实验报告
  8. 作用域、变量提升、函数提升、数据类型
  9. er图-为什么画er图?有哪些规范?
  10. 地理空间数据下载 积累
  11. Navicat Premium使用教程
  12. 联想笔记本电脑开机无法修复计算机,联想笔记本开机没反应怎么办 笔记本无法开机的解决方法...
  13. 个人网站建设记录 及Markdown使用实践
  14. 名编辑电子杂志大师教程 | 设置电子杂志书签功能
  15. 2012-07-29 入手第一款Apple产品:The New iPad
  16. android 百度云语音,手机安卓百度云AI智能之语音合成
  17. 二进制补码是如何把减法转变为加法的
  18. [bzoj4544]椭圆上的整点 解题报告
  19. ps -ef | grep httpd | grep -v grep | wc -l
  20. 【PTA】代码部分基础整理

热门文章

  1. 理论【3】AES 加密原理
  2. WEB 性能测试-介绍 学习笔记
  3. 攻防世界 - (题目名称-文件包含)
  4. js指定删除数组中的某个值
  5. 量化投资学习-3:股票与美女3-美女的股东婆家和娘家
  6. 深度学习建模训练总结(五):梳理NLP发展里程碑——各种注意力机制对比分析
  7. 〖产品思维训练白宝书 - 核心竞争力篇⑯〗- 产品经理核心竞争力解读之如何学习的又快又好并学以致用
  8. leetcode 206 反转链表
  9. IDEA提交项目到码云
  10. Windows 自带录屏 Xbox