因工作原因,需要用到模拟输入这个东东,查阅了一些资料,实现方式有多种,我大概分为两类,命令行类和程序类。

命令行类包括自动化测试组件monkeyrunner,getevent/setevent命令,input命令

程序类包括MotionEvent,AccessibilityService,反射等

本人对这块也是刚刚接触,几种方式不评优劣,仅就工作中用到的知识点做记录,以备后用。

1、命令行开启和关闭应用

adb shell am start -n 包名/入口activity   //开启某个应用
adb shell am force-stop 包名 //关闭某个应用

2、input命令参数

Usage: input [<source>] <command> [<arg>...]

The sources are:
trackball //滚动球
joystick //操纵杆
touchnavigation //触摸导航
mouse //鼠标
keyboard //键盘
gamepad //手柄
touchpad //触摸板
dpad //模拟手柄
stylus //尖笔
touchscreen //触摸屏 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)

其中我们常用的就是keyboard和touchscreen,用起来也很简单。

3、keyevent值对应表

 -->  "KEYCODE_UNKNOWN"
--> "KEYCODE_MENU"
--> "KEYCODE_SOFT_RIGHT"
--> "KEYCODE_HOME"
--> "KEYCODE_BACK"
--> "KEYCODE_CALL"
--> "KEYCODE_ENDCALL"
--> "KEYCODE_0"
--> "KEYCODE_1"
--> "KEYCODE_2"
--> "KEYCODE_3"
--> "KEYCODE_4"
--> "KEYCODE_5"
--> "KEYCODE_6"
--> "KEYCODE_7"
--> "KEYCODE_8"
--> "KEYCODE_9"
--> "KEYCODE_STAR"
--> "KEYCODE_POUND"
--> "KEYCODE_DPAD_UP"
--> "KEYCODE_DPAD_DOWN"
--> "KEYCODE_DPAD_LEFT"
--> "KEYCODE_DPAD_RIGHT"
--> "KEYCODE_DPAD_CENTER"
--> "KEYCODE_VOLUME_UP"
--> "KEYCODE_VOLUME_DOWN"
--> "KEYCODE_POWER"
--> "KEYCODE_CAMERA"
--> "KEYCODE_CLEAR"
--> "KEYCODE_A"
--> "KEYCODE_B"
--> "KEYCODE_C"
--> "KEYCODE_D"
--> "KEYCODE_E"
--> "KEYCODE_F"
--> "KEYCODE_G"
--> "KEYCODE_H"
--> "KEYCODE_I"
--> "KEYCODE_J"
--> "KEYCODE_K"
--> "KEYCODE_L"
--> "KEYCODE_M"
--> "KEYCODE_N"
--> "KEYCODE_O"
--> "KEYCODE_P"
--> "KEYCODE_Q"
--> "KEYCODE_R"
--> "KEYCODE_S"
--> "KEYCODE_T"
--> "KEYCODE_U"
--> "KEYCODE_V"
--> "KEYCODE_W"
--> "KEYCODE_X"
--> "KEYCODE_Y"
--> "KEYCODE_Z"
--> "KEYCODE_COMMA"
--> "KEYCODE_PERIOD"
--> "KEYCODE_ALT_LEFT"
--> "KEYCODE_ALT_RIGHT"
--> "KEYCODE_SHIFT_LEFT"
--> "KEYCODE_SHIFT_RIGHT"
--> "KEYCODE_TAB"
--> "KEYCODE_SPACE"
--> "KEYCODE_SYM"
--> "KEYCODE_EXPLORER"
--> "KEYCODE_ENVELOPE"
--> "KEYCODE_ENTER"
--> "KEYCODE_DEL"
--> "KEYCODE_GRAVE"
--> "KEYCODE_MINUS"
--> "KEYCODE_EQUALS"
--> "KEYCODE_LEFT_BRACKET"
--> "KEYCODE_RIGHT_BRACKET"
--> "KEYCODE_BACKSLASH"
--> "KEYCODE_SEMICOLON"
--> "KEYCODE_APOSTROPHE"
--> "KEYCODE_SLASH"
--> "KEYCODE_AT"
--> "KEYCODE_NUM"
--> "KEYCODE_HEADSETHOOK"
--> "KEYCODE_FOCUS"
--> "KEYCODE_PLUS"
--> "KEYCODE_MENU"
--> "KEYCODE_NOTIFICATION"
--> "KEYCODE_SEARCH" --> "TAG_LAST_KEYCODE"

4、getevent/sendevent

首先执行getevent -p命令获取android设备上所有的input设备,找到screen设备

执行getevent 设备编号,在屏幕上做操作,记录getevent的结果。

type,code,value

  000002a4

需要注意的是getevent获取的值是16进制的,sendevent发送的是10进制,需要做一下转换

Android 模拟输入那点事的更多相关文章

  1. Android 谈谈封装那些事 --BaseActivity 和 BaseFragment(二)

      1.前言 昨天谈了BaseActivity的封装,Android谈谈封装那些事--BaseActivity和BaseFragment(一)有很多小伙伴提了很多建议,比如: 通用标题栏可以自定义Vi ...

  2. Android打包的那些事

    使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进.在此,把这些相关的东西记录,做一总结. 1. 替换AndroidManifes ...

  3. 不可不知的 Android strings.xml 那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...

  4. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  5. 关于ANDROID模拟器的一些事

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 继上一篇Android Studio VS Eclipse的文章后接着来分享AnDevCo ...

  6. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    [Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...

  7. Android GC 那点事

    版权声明:本文由陈昱全原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/170 来源:腾云阁 https://www.qclo ...

  8. Android桌面快捷方式那些事与那些坑

    原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了.之前一段时间一直在搞红包助手,就没抽时间写博客 ...

  9. android 线程那点事

    在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个 ...

随机推荐

  1. win10 安装microsoft.net framework3.5

    转载于:https://www.windows10.pro/win10-net-framework-3-5/ 之前手残不小心把microsoft.net framework3.5删了,结果导致Sql ...

  2. 数据库还原错误:指定的转换无效。(SqlManagerUI)

    SSMS在一定程度上方便我们进行一些常见的操作.但有时候它处理得又不是那么不人性化.尤其是错误信息. 今天我在进行数据库还原的时候就碰到一个错误:指定的转换无效.(SqlManagerUI) Spec ...

  3. Unity[C#] Reflection Use

      Reflection Reflection是C#程序员的一个最有力工具 最常用的例子来说明反射的用处是一个插件系统.假设你正在创建一个 接受用户创建 的扩展程序,有没有办法预先知道哪些方法这个扩展 ...

  4. 【转】Mysql学习---SQL的优化

    [原文]https://www.toutiao.com/i6594314336913588743/ mysql如何处理亿级数据,第一个阶段--优化SQL语句 1.应尽量避免在 where 子句中使用! ...

  5. 利用Chrome浏览器的开发者工具截取整个页面

    ①打开Chrome浏览器的开发者工具: 快捷键: command + Alt + I (Mac). Ctrl + shift + I (Windows) 或者: 鼠标右键 -> 弹出菜单中选择 ...

  6. 关于datatables与jquerUI版本冲突问题

    今天开发项目是,需要用到表格,于是想到,之前的项目中使用过datatables插件,于是就拿了过来,但是发现无法识别 Uncaught TypeError: $(...).DataTable is n ...

  7. jQuery 1.11 / 2.1 beta 版发布

    jQuery开发团队近日发布了jQuery 1.11和2.1的beta版本. jQuery 1.x版本支持IE 6/7/8,jQuery 2.x 不支持,如果你已经抛弃了IE 6/7/8用户,可以升级 ...

  8. 晚上打开eclipse时碰到这个问题 :Workspace in use or cannot be created, choose a different one.

    晚上打开eclipse时碰到这个问题 :Workspace in use or cannot be created, choose a different one. 网上看到这方面的解决方式: 原因: ...

  9. tarjan【模板】缩点

    传送门:https://www.luogu.org/problemnew/show/P3387 首先呢,tarjan找一个图的强连通分量是基于对图的dfs的.这中间开了一个dfn[]代表dfs序,还有 ...

  10. WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer

    星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...