怎么在Android开发中模拟输入
这篇文章给大家介绍怎么在Android开发中模拟输入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
input 指令
我们打开adb,进入shell,输入input可以看到指令的参数说明。
其中source一般都是用的默认值可以忽略,我们主要关注的就是后面的command
text:文本输入;keyevent:键盘按键;这两条指令是所有设备通用的。
tap:点击屏幕;swipe:滑动屏幕;这两条指令适用于有触摸屏的设备。
press,roll适用于有触摸球的设备。
模拟输入
在使用input指令之前我们要先获取一下root权限。
private void execShellCmd(String cmd) { try { Process process = Runtime.getRuntime().exec("su"); OutputStream outputStream = process.getOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream( outputStream); dataOutputStream.writeBytes(cmd); dataOutputStream.flush(); dataOutputStream.close(); outputStream.close(); } catch (Throwable t) { t.printStackTrace(); } }
text
输入之前需要提前获取焦点。
2.输入有特殊含义的特殊字符,无法直接输入 需要使用keyevent 如: ' '
我们整一个EditText,然后进行text输入测试。
execShellCmd("input text 'hello,world'");
我们发现少了一个H,在控制台可以看到日志。
可以看到在按下H的时候,EditText没有获取到焦点。
可能是页面初始化以后就开始执行输入操作,此时editText还没有获取到焦点,获取焦点可能存在点延时。所以我们尝试延迟1s后进行输入。
private Handler handler = new Handler();private Runnable task = new Runnable() { public void run() { execShellCmd("input text 'hello,world'"); }};// 延迟1s后输入handler.postDelayed(task,1000);
keyevent
execShellCmd("input text 'hello,world' \n input keyevent 68 \n input keyevent 21");
输入hello,world,然后输入',然后左移光标
常见的keycode可以参见frameworks/base/core/java/android/view/KeyEvent.java
tap
android 中坐标系如下图所示。
我们可以打开手机中的 开发者选项 -> 指针位置 来辅助定位,可以再上方看到x,y相对的偏移量。
点击屏幕(100,200)位置。
execShellCmd("input tap 100 200");
swipe
滑动屏幕和tap相似只需要传入两个坐标即可。后面也可以设置滑动时间(ms),时间越短滑动的相应距离就会越长。
从屏幕(100,200)滑动到(300,400)。
execShellCmd("input swipe 100 200 300 400");
关于怎么在Android开发中模拟输入就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341