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
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(); } }
ansen_666 有三年android开发经验,开发过加密.短视频.直播app,一直在互联网公司工作,目前就职于上海翼成科技,担任android开发组长。
相关文章
- [Android Pro] 横竖屏切换时,禁止activity重新创建,android:configChanges="keyboardHidden|orientation" 不起作用
- [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法
- [Android Pro] Android学习——在线查看android源代码的3种方式
- Android API之android.provider.ContactsContract
- 【Android 疑难杂症1】android.content.ActivityNotFoundException: Unable to find explicit activity class
- Android开发之adb无法连接
- [PWA] Add Push Notifications to a PWA with React in Chrome and on Android
- Android API 中文 (51) —— ZoomButtonsController
- Android【报错】. lang。android.app ClassCastException。SharedPreferencesImpl不能被强制转换为android.content.Shared
- Android源码中com.android.support依赖迁移到AndroidX库
- Android报错提示:Failed to resolve: com.android.support.constraint:constraint-layout:1.1.3
- Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框
- android 预置第三方32位apk到64位系统中so库兼容的问题,apk运行缺jar问题解决
- Android 监控USB插拔事件和sdcard卡插拔事件
- Android音视频 - 学习路线概览
- 【Android 进程保活】应用进程拉活 ( 应用进程拉活简介 | 广播拉活 | 显示广播与隐式广播 | 全家桶拉活 )
- Android 使用 DownloadManager 管理系统下载任务的方法,android管理系统
- android getLong()用法
- Android仿iPhone 滚轮控件 实现
- Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)(转)
- Android查看支持硬编解码器(十五)