欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中如何模拟输入

程序员文章站 2022-07-06 13:09:59
主要思路是使用 adb shell input指令来模拟按键及触摸输入。但是前提是需要root,且华为手机出于安全考虑已经停止了root解码。所以测试建议换个别的手机。或是直接用as中的模拟器,用有g...

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

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

input 指令

我们打开adb,进入shell,输入input可以看到指令的参数说明。

Android开发中如何模拟输入

其中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,在控制台可以看到日志。

Android开发中如何模拟输入

可以看到在按下h的时候,edittext没有获取到焦点。

Android开发中如何模拟输入

可能是页面初始化以后就开始执行输入操作,此时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);

Android开发中如何模拟输入

keyevent

execshellcmd("input text 'hello,world' \n input keyevent 68 \n input keyevent 21");

输入hello,world,然后输入',然后左移光标

Android开发中如何模拟输入

常见的keycode可以参见frameworks/base/core/java/android/view/keyevent.java

Android开发中如何模拟输入

tap

android 中坐标系如下图所示。

Android开发中如何模拟输入

我们可以打开手机中的 开发者选项 -> 指针位置 来辅助定位,可以再上方看到x,y相对的偏移量。

Android开发中如何模拟输入

点击屏幕(100,200)位置。

execshellcmd("input tap 100 200");

swipe

滑动屏幕和tap相似只需要传入两个坐标即可。后面也可以设置滑动时间(ms),时间越短滑动的相应距离就会越长。

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

execshellcmd("input swipe 100 200 300 400");

以上就是android开发中如何模拟输入的详细内容,更多关于android 模拟输入的资料请关注其它相关文章!