Android 模拟输入那点事
因工作原因,需要用到模拟输入这个东东,查阅了一些资料,实现方式有多种,我大概分为两类,命令行类和程序类。
命令行类包括自动化测试组件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 模拟输入那点事的更多相关文章
- Android 谈谈封装那些事 --BaseActivity 和 BaseFragment(二)
1.前言 昨天谈了BaseActivity的封装,Android谈谈封装那些事--BaseActivity和BaseFragment(一)有很多小伙伴提了很多建议,比如: 通用标题栏可以自定义Vi ...
- Android打包的那些事
使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进.在此,把这些相关的东西记录,做一总结. 1. 替换AndroidManifes ...
- 不可不知的 Android strings.xml 那些事
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...
- 【Android开发那点破事】打开APP加载页面实现
今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...
- 关于ANDROID模拟器的一些事
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 继上一篇Android Studio VS Eclipse的文章后接着来分享AnDevCo ...
- [Android开发那点破事]解决android.os.NetworkOnMainThreadException
[Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...
- Android GC 那点事
版权声明:本文由陈昱全原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/170 来源:腾云阁 https://www.qclo ...
- Android桌面快捷方式那些事与那些坑
原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了.之前一段时间一直在搞红包助手,就没抽时间写博客 ...
- android 线程那点事
在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个 ...
随机推荐
- DevOps之基础设施-电力
唠叨话 关于噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <基础设施-电力> 关于基础设施的电力部分,知识与技能的层次(知道.理解.运用),理论与实践的 ...
- jboss eap6.1(4)(部署应用)
1.添加应用war包 手动部署,添加war包到standalone\deployments下,手工创建一个文件,如war包名称是a.war,创建一个a.war.deployed文件,内容随意. 2. ...
- Unity By Reflection Update Scripts
App热更新需求 我正在使用Unity 3D开发一个Android的应用,它会下载AssetBundles并加载它们的内容,但由于AssetBundles不能包含脚本,我将使用预编译的C#脚本,并使用 ...
- Android高级_第三方下载工具Volley
Volley下载主要应用于下载文本数据和图片数据两个方向,下面分别介绍: 一.使用Volley开启下载,首先要做的是导包和添加权限: (1)在build.gradle文件中导入依赖包:compile ...
- selenium-百度搜索框输入后,定位联想下拉框元素
1.输入关键字后,显示联想下拉框,鼠标右键对应的联想字段,点击检查,就可在F12模式下元素查看器中定位到,之后使用Xpath定位.
- Beta 冲刺 (1/7)
Beta 冲刺 (1/7) 队名:洛基小队 峻雄(组长) 已完成:β版的初步计划 后两天计划:设计角色的技能树 剩余任务:角色的技能 困难:关于技能施放以及相关伤害计算等的代码 非易 已完成:角色交互 ...
- 一个U盘黑掉你:TEENSY实战(test)
挖掘过程一: 自从上一次投稿,已经好久好久没写文章了.今天就着吃饭的时间,写篇文章,记录下自己学习xss这么久的心得.在我看来.Xss就是javascript注入,你可以在js语法规定的范畴内做任何事 ...
- [python]关于列表增加元素的几种操作
1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert(0,b) print a 输出: [[1, ...
- 封装Ajax框架!(前言篇)
Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点,如果这些你都会的话,请直接跳转到封装ajax框架!(代码篇) 一.Ajax对象的创建 1.创建 ...
- CVE-2017-8046(Spring Data Rest RCE)
环境搭建参考第一个链接,springboot启动文件如下,不同的启类,将Application.class修改一下就可以了,直接debug.注意:默认版本是2.0.3版本,修改成低版本,看一下mvn下 ...