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

命令行类包括自动化测试组件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. c#经典算法之冒泡排序(Bubble Sort)

    转载于:https://www.cnblogs.com/shen-hua/p/5422676.html 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面, ...

  2. SQL Server如何附加只有mdf的数据库文件

    有时候SQL Server意外断电会导致SQL Server的ldf日志文件丢失或者损坏,这个时候你如果直接附加mdf文件到SQL Server会失败,这里提供一个方法可以还原只有mdf的数据库文件, ...

  3. sql server 时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  4. 在Ubuntu17.04中遇到无法清空回收站解决方法

    在Ubuntu17.04下,遇到清空回收站文件时报错,提示”Failed to delete the item from the trash”,无法清空回收站. 回收站其实就是一个文件夹,存放着被删掉 ...

  5. git bash安装和基本设置

    Part1:安装步骤 1.下载地址: https://git-for-windows.github.io/ 2.下载完成后安装,安装路径自己选择,其他的选项参照下图: 其他的一步一步往下即可,最后Fi ...

  6. 3.5星|《订阅》:Youtube对用户喜好的发现与应对

    订阅:数字时代的商业变现路径 主要内容我总结是Youtube对用户喜好的发现与应对.可以认为很多时候作者说的是Youtubu官方的态度与想法.穿插了许多Youtube上的成功创作者的故事. Youtu ...

  7. SP--report存储过程

    USE [edison_prc] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ),),),),),@day1 int,@day2 int) ...

  8. C++课堂作业_02_PAT1025.反转链表

    The 1st classwork of the C++ program 题目:PAT.1025.反转链表 github链接:Click Here mdzz,做完题目的第一感受= = 这道题的题意就是 ...

  9. 声明式编程:程序=数据+逻辑(what)+算法(控制+计算)

    接口:what: 实现:算法:指令: 编程语言中,凡是不涉及到算法的部分,都可以认为是声明式编程. 命令式编程可以与算法划等号:算法要求严格的计算逻辑和控制,是实施细节的精准描述: 命令式编程与声明式 ...

  10. 【转】ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践

    解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 此处手札 供后人参 ...