Android sendevent/getevent 用法

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介:

前言:最近在弄一个模拟用户点击屏幕的功能,并且不需要用户点击屏幕,后台自动给输入框赋值,类似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

  1. /dev/input/event7: 0001 014a 00000001  
  2. /dev/input/event7: 0003 003a 00000001  
  3. /dev/input/event7: 0003 0035 00000172  
  4. /dev/input/event7: 0003 0036 00000129  
  5. /dev/input/event7: 0000 0002 00000000  
  6. /dev/input/event7: 0000 0000 00000000  
  7. /dev/input/event7: 0001 014a 00000000  
  8. /dev/input/event7: 0003 003a 00000000  
  9. /dev/input/event7: 0003 0035 00000172  
  10. /dev/input/event7: 0003 0036 00000129  
  11. /dev/input/event7: 0000 0002 00000000  
  12. /dev/input/event7: 0000 0000 00000000  

sendEvent事件的使用

1).我们用getEvent获取的值是16进制的,而sendEvent输入的值是10进制的,我这里把这些值转换了,并且增加了前缀"adb shell sendevent".

  1. adb shell sendevent /dev/input/event7 0001 330 00000001  
  2. adb shell sendevent /dev/input/event7 0003 58  00000001  
  3. adb shell sendevent /dev/input/event7 0003 0053 00000370  
  4. adb shell sendevent /dev/input/event7 0003 0054 00000297  
  5. adb shell sendevent /dev/input/event7 0000 0002 00000000  
  6. adb shell sendevent /dev/input/event7 0000 0000 00000000  
  7. adb shell sendevent /dev/input/event7 0001 0330 00000000  
  8. adb shell sendevent /dev/input/event7 0003 0058 00000000  
  9. adb shell sendevent /dev/input/event7 0003 0053 00000370  
  10. adb shell sendevent /dev/input/event7 0003 0054 00000297  
  11. adb shell sendevent /dev/input/event7 0000 0002 00000000  
  12. 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赋值.

  1. public class MainActivity extends Activity {  
  2.     public final static String CLIECK_INPUT="" +  
  3.               "sendevent /dev/input/event7 0001 330 00000001 \n " +  
  4.               "sendevent /dev/input/event7 0003 58 00000001 \n" +  
  5.               "sendevent /dev/input/event7 0003 53 00000159 \n" +  
  6.               "sendevent /dev/input/event7 0003 54 00000186 \n" +  
  7.               "sendevent /dev/input/event7 0000 0002 00000000 \n" +  
  8.               "sendevent /dev/input/event7 0000 0000 00000000 \n" +  
  9.               "sendevent /dev/input/event7 0001 330 00000000 \n" +  
  10.               "sendevent /dev/input/event7 0003 58 00000000 \n" +  
  11.               "sendevent /dev/input/event7 0003 53 00000159 \n" +  
  12.               "sendevent /dev/input/event7 0003 54 00000186 \n" +  
  13.               "sendevent /dev/input/event7 0000 0002 00000000 \n" +  
  14.               "sendevent /dev/input/event7 0000 0000 00000000 \n sleep 2 m \n" +  
  15.               " ";  
  16.       
  17.       
  18.     private Handler handler=new Handler(){  
  19.         public void handleMessage(android.os.Message msg) {  
  20.               
  21.         };  
  22.     };  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.           
  29.         findViewById(R.id.confirm).setOnClickListener(clickListener);  
  30.           
  31.         handler.postDelayed(new Runnable() {  
  32.             @Override  
  33.             public void run() {  
  34.                 execShell(CLIECK_INPUT);  
  35.                 execShell("input text  'ansen'");  
  36.             }  
  37.         }, 3000);  
  38.     }  
  39.       
  40.     private OnClickListener clickListener=new OnClickListener() {  
  41.         @Override  
  42.         public void onClick(View v) {  
  43.             Toast.makeText(MainActivity.this"点击了确定按钮"0).show();  
  44.         }  
  45.     };  
  46.       
  47.     public void execShell(String cmd) {  
  48.         try {  
  49.             Toast.makeText(MainActivity.this,"执行shell命令"0).show();  
  50.             // 权限设置  
  51.             Process p = Runtime.getRuntime().exec("su");  
  52.             // 获取输出流  
  53.             OutputStream outputStream = p.getOutputStream();  
  54.             DataOutputStream dataOutputStream = new DataOutputStream(outputStream);  
  55.             // 将命令写入  
  56.             dataOutputStream.writeBytes(cmd);  
  57.             // 提交命令  
  58.             dataOutputStream.flush();  
  59.             // 关闭流操作  
  60.             dataOutputStream.close();  
  61.             outputStream.close();  
  62.         } catch (Throwable t) {  
  63.             t.printStackTrace();  
  64.         }  
  65.     }  
  66. }  

运行效果图如下:



点击下载源码

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
3月前
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
247 12
|
5月前
|
Android开发 Kotlin
Android经典面试题之Kotlin中Lambda表达式有哪些用法
Kotlin的Lambda表达式是匿名函数的简洁形式,常用于集合操作和高阶函数。基本语法是`{参数 -> 表达式}`。例如,`{a, b -> a + b}`是一个加法lambda。它们可在`map`、`filter`等函数中使用,也可作为参数传递。单参数时可使用`it`关键字,如`list.map { it * 2 }`。类型推断简化了类型声明。
28 0
|
7月前
|
定位技术 Android开发
Intent在Android中的几种用法
Intent在Android中的几种用法
79 1
|
Android开发
Android 中选项菜单(Option menu)的用法
Android 中选项菜单(Option menu)的用法
196 0
|
7月前
|
Java Android开发 数据安全/隐私保护
安卓逆向 -- IDA基本用法
安卓逆向 -- IDA基本用法
97 0
|
Android开发
Android 星级评分条的基本用法
Android 星级评分条的基本用法
132 2
|
Android开发
Android onActivityResult()的属性与用法
Android onActivityResult()的属性与用法
157 1
|
Android开发
Android 中CheckBox复选框按钮的基本用法
Android 中CheckBox复选框按钮的基本用法
154 0
Android 中CheckBox复选框按钮的基本用法
|
Android开发
Android 中SeekBar拖动条控件的基本用法
Android 中SeekBar拖动条控件的基本用法
159 0
Android 中SeekBar拖动条控件的基本用法
|
Android开发
Android studio中的调试(Debug)按钮具体用法
Android studio中的调试(Debug)按钮具体用法
174 0