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 线程那点事
在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个 ...
随机推荐
- LeetCode题解之Maximum Depth of N-ary Tree
1.题目描述 2.问题分析 利用递归fangf 3.代码 int maxDepth(Node* root) { int res = maxdep(root); return res; } int ma ...
- 使用SQL Server Management Studio操作replication时,要用机器名登录,不要用IP地址
如果你在使用SSMS(SQL Server Management Studio)登录SQL Server时,使用的是IP地址,如下图所示: 当你操作replication时,会报错: 从上面的错误提示 ...
- 自动代码质量分析(GitLab+JenKins+SonarQube)
自动代码质量分析(GitLab+JenKins+SonarQube) 1.需求场景 开发提交代码自动执行代码质量分析. 2.所需应用 GitLab,JenKins,SonarQube 3.架构图 4. ...
- HTTP的cookie
HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解.首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知 ...
- 题解 P2701 【[USACO5.3]巨大的牛棚Big Barn】
题面 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚. 他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方. 我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的 ...
- 团队作业——Alpha冲刺 12/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:自定义保存界面布局以及交互接口函数的实现 明日任务:总结项目中的问题,为什么没能按照预期推进项目 郭剑南 今日任务:继续解决Python编 ...
- Spring Boot 扩展点应用之工厂加载机制
Spring 工厂加载机制,即 Spring Factories Loader,核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类,并配置在约定好的META-INF/spr ...
- luogu P2365 任务安排
嘟嘟嘟 如果常规dp,\(dp[i][j]\)表示前\(i\)个任务分\(j\)组,得到 \[dp[i][j] = min _ {k = 0} ^ {i - 1} (dp[k][j - 1] + (s ...
- 【转】1.2 CDN的基本工作过程
1.2 CDN的基本工作过程 使用CDN会极大地简化网站的系统维护工作量,网站维护人员只需将网站内容注入CDN的系统,通过CDN部署在各个物理位置的服务器进行全网分发,就可以实现跨运营商.跨地域的用 ...
- Scala学习之路 (七)Scala的柯里化及其应用
一.概念 柯里化(currying, 以逻辑学家Haskell Brooks Curry的名字命名)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程.新的函数返回一个以原有第二个参数作为 ...