Android sendevent/getevent 用法
前言:最近在弄一个模拟用户点击屏幕的功能,并且不需要用户点击屏幕,后台自动给输入框赋值,类似pc端按键精灵的功能,在网上找了很多人的资料,写的都不是太详细,一知半解.还要自己慢慢研究.于是我这边写一篇博客整理出来,并且附上demo下载.
这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c 使用这两个命令的前提是手机获取了root权限.
getevent可以获取用户的点击事件.
1).在cmd窗口中输入命令:adb shell getevent (输入adb命令的时候一定要配置android sdk环境变量)
2).点击我们app的确定按钮.就会获取设备汇报的事件.
3).我们可以看到点击一个按钮产生了12行信息,代表12个事件. 我来解释第一行信息: [设备名称] [类型] [code] [value]
有哪些类型请参考博客:http://blog.csdn.net/kickxxx/article/details/7482392
/dev/input/event7: 0001 014a 00000001
/dev/input/event7: 0003 003a 00000001
/dev/input/event7: 0003 0035 00000172
/dev/input/event7: 0003 0036 00000129
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000
/dev/input/event7: 0001 014a 00000000
/dev/input/event7: 0003 003a 00000000
/dev/input/event7: 0003 0035 00000172
/dev/input/event7: 0003 0036 00000129
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000
sendEvent事件的使用
1).我们用getEvent获取的值是16进制的,而sendEvent输入的值是10进制的,我这里把这些值转换了,并且增加了前缀"adb shell sendevent".
adb shell sendevent /dev/input/event7 0001 330 00000001
adb shell sendevent /dev/input/event7 0003 58 00000001
adb shell sendevent /dev/input/event7 0003 0053 00000370
adb shell sendevent /dev/input/event7 0003 0054 00000297
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0000 0000 00000000
adb shell sendevent /dev/input/event7 0001 0330 00000000
adb shell sendevent /dev/input/event7 0003 0058 00000000
adb shell sendevent /dev/input/event7 0003 0053 00000370
adb shell sendevent /dev/input/event7 0003 0054 00000297
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0000 0000 00000000
2).我们看到上面最后面一栏中有370跟297两个数,这是是点击的坐标在屏幕的位置.如果我们用点击事件,只需要改变这两个值就可.
3).把这些命令复制到粘贴板,我们输入这些命令,效果图如下:
这里讲解了sendevent跟getevent的使用,如果我们要给输入框输入值,只需要一条命令就行. adb shell input text 'ansen'
还有一些其他命令,参考博客:http://blog.sina.com.cn/s/blog_76550fd70101j2zs.html
接下来看代码如何实现这个功能.我们在android程序中可以执行shell命令.再次提醒需要root权限.我这边是软件启动延时三秒,执行点击事件点击输入框,然后给EditText赋值.
public class MainActivity extends Activity {
public final static String CLIECK_INPUT="" +
"sendevent /dev/input/event7 0001 330 00000001 \n " +
"sendevent /dev/input/event7 0003 58 00000001 \n" +
"sendevent /dev/input/event7 0003 53 00000159 \n" +
"sendevent /dev/input/event7 0003 54 00000186 \n" +
"sendevent /dev/input/event7 0000 0002 00000000 \n" +
"sendevent /dev/input/event7 0000 0000 00000000 \n" +
"sendevent /dev/input/event7 0001 330 00000000 \n" +
"sendevent /dev/input/event7 0003 58 00000000 \n" +
"sendevent /dev/input/event7 0003 53 00000159 \n" +
"sendevent /dev/input/event7 0003 54 00000186 \n" +
"sendevent /dev/input/event7 0000 0002 00000000 \n" +
"sendevent /dev/input/event7 0000 0000 00000000 \n sleep 2 m \n" +
" "; private Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) { };
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); findViewById(R.id.confirm).setOnClickListener(clickListener); handler.postDelayed(new Runnable() {
@Override
public void run() {
execShell(CLIECK_INPUT);
execShell("input text 'ansen'");
}
}, 3000);
} private OnClickListener clickListener=new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了确定按钮", 0).show();
}
}; public void execShell(String cmd) {
try {
Toast.makeText(MainActivity.this,"执行shell命令", 0).show();
// 权限设置
Process p = Runtime.getRuntime().exec("su");
// 获取输出流
OutputStream outputStream = p.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
// 将命令写入
dataOutputStream.writeBytes(cmd);
// 提交命令
dataOutputStream.flush();
// 关闭流操作
dataOutputStream.close();
outputStream.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
运行效果图如下:
Android sendevent/getevent 用法的更多相关文章
- Android自动化 -- sendevent/getevent 用法
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的ges ...
- 【Android学习】android:layout_weight的用法实例
对于android:layout_weight的用法,用下面的例子来说明: <LinearLayout xmlns:android="http://schemas.android.co ...
- Android之Adapter用法总结-(转)
Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...
- Android之Adapter用法总结(转)
Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
- Android之Adapter用法总结
http://blog.csdn.net/fznpcy/article/details/8658155 Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器 ...
- xamarin android viewpager的用法
1.什么是ViewPager 通过手势滑动可以完成view的切换,一般是用来app的引导页或则实现图片轮播,类似网页上的banner轮播. Adnroid 3.0后引入的一个UI控件,在xamarin ...
- Android开发PreferenceActivity 用法的代码
将开发过程中常用的一些内容做个收藏,下面资料是关于Android开发PreferenceActivity 用法的内容,希望对大伙有一些用处.public class Setting extends P ...
- Android ContentProvider基本用法
转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了 ...
随机推荐
- 【总结】C# Access 数据库 增删查改 的简单步骤
引用集: using System.Data.OleDb; static string exePath = System.Environment.CurrentDirectory;//本程序所 ...
- eclipse常见问题
使用eclipse进入断点,当弹出"Confir Perspective Switch"视图时,选择"Yes".之后每次进入断点都会自动切换到debug视图. ...
- 用soapUI测试webservice
测试webservice时,有时需要写一个客户端来向服务端发起请求才可以测试服务,最近看到一款工具soap ui,也可以调试VS2010中的程序. 首先要把webservice 发布到本地,网上已经有 ...
- MongoDB-分片
1 分区12 分区23 路由服务器实例-mongos(客户端访问它)4 配置服务器实例-config 1 分片 cd /d D:\Test\bin1 10001 2 分片 cd /d D:\Test\ ...
- 客户端连接注册Ejabberd新用户
今天需要使用客户端注册新用户,结果发现注册失败,在管理后台添加新用户成功.编译安装ejabberd就没有管了,经过翻论坛的到解决方法 在ejabberd.yml中. access: trusted_n ...
- 字符串转换为数字---使用java7的装箱功能
以前转换只知道使用Xxx.prasexxx方法,原来,还可以直接装箱自动转换. //String类型字符串 String intStr = "123"; int str2int1 ...
- python基础之day1
Python 简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python为我们提供了非常完善的基础代码库,覆盖了 ...
- pythonchallenge 解谜 Level 5
第五关的确很坑爹... 不过,根据之前的思路,我想着是把信息放在了 “源码” 中. 翻了下源码.有用的东西在以下部分. <html><head> <title>pe ...
- front end about mobile web techs
WEB OF DEVICES http://www.w3.org/standards/webofdevices/ MOBILE WEB http://www.w3.org/standards/webd ...
- Python基本数据类型——str
字符串常用操作 移除空白 分割 长度 索引 切片 class str(basestring): """ str(object='') -> string Retur ...