Android 中模拟输入

Android 中模拟输入,第1张

概述主要思路是使用adbshellinput指令来模拟按键及触摸输入。但是前提是需要root,且华为手机出于安全考虑已经停止了root解码。所以测试建议换个别的手机。或是直接用AS中的模拟器,用有GoogleApis的版本。input指令我们打开adb,进入shell,输入input可以看到指令的参数说明。

主要思路是使用 adb shell input指令来模拟按键及触摸输入。

但是前提是需要root,且华为手机出于安全考虑已经停止了root解码。所以测试建议换个别的手机。或是直接用AS中的模拟器,用有Google Apis的版本。

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

1.输入之前需要提前获取焦点。
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相似只需要传入两个坐标即可。

从屏幕(100,200)滑动到(300,400)。

execShellCmd("input tap 100 200 300 400");
总结

以上是内存溢出为你收集整理的Android 中模拟输入全部内容,希望文章能够帮你解决Android 中模拟输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存