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

命令行类包括自动化测试组件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. VS插件VisualSVN v5.2.3.0 破解文件

    分享一个VisualSVN v5.2.3的破解文件: >>>> 点此下载 <<<< 下载后,找到VisualSVN的安装目录,例如:C:\Program ...

  2. SQL Server 合并复制遇到identity range check报错的解决 (转载)

    最近帮一个客户搭建跨洋的合并复制,由于数据库非常大,跨洋网络条件不稳定,因此只能通过备份初始化,在初始化完成后向海外订阅端插入数据时发现报出如下错误: Msg 548, Level 16, State ...

  3. 如何在linux centos 环境下运行.exe文件

    linux是不能运行window下的可执行文件的,必须借助于wine.百度了以下wine如下:   Wine (“Wine Is Not an Emulator” 的递归缩写)是一个能够在多种 POS ...

  4. HTTP学习---TCP三次握手和四次挥手

    IP协议 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成不同主机的通信,我们需要某种方式来唯一标识一台主机,这个标识,就是著名的IP地址.通 ...

  5. C/C++控制Windows关机/注销/重启的正确姿势

    简介 说到代码控制Windows关机/注销/重启的方式,有很多种,最简单的不过就是控制命令行,使用system("pause")函数执行一个shutdown -s -t 0,关机就 ...

  6. [转][solr] - 索引数据删除

    删除solr索引数据,使用XML有两种写法: 1) <delete><id>1</id></delete> <commit/> 2) < ...

  7. FastDFS分布文件系统Java客户端使用

    原文链接:http://blog.csdn.net/xyang81/article/details/52847311 Java客户端源代码和jar:链接:http://pan.baidu.com/s/ ...

  8. mapreduce设置setMapOutputKeyClass与setMapOutputValueClass原因

    一般的mapreduce的wordcount程序如下: public class WcMapper extends Mapper<LongWritable, Text, Text, LongWr ...

  9. Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换(转载)

    第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换 1.函数介绍在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两 ...

  10. 【JavaScript】read_line()、print()实现输入输出

    /*输入 输入的第一行为一个正整数T,表示有T组测试数据.随后的T行中,每行为一组测试数据. 每组测试数据包含由3个正整数构成,分别为N.M和a,其中1<=N, M, a <=10^9. ...