最近在在看怎么样让android实现自动点击活动里面的任意位置,不通过获得控件的id来得到点击效果;
看了很多之后发现其实要通过adb shell来实现 什么?adb shell是啥?emmmmm 自行百度吧,我们在这儿把它看为android的命令行工具;废话不说 我们开始在代码里面实现自动点击 让程序可以自动点击。两个方法 一个不需要root,一个需要
当然 先看方法一:先创建一个AutoTouch类 代码如下:
import android.app.Activity;
import android.util.Log;
import android.widget.Toast;
public class AutoTouch {
public void autoClickPos(final double x1, final double y1,final double x2, final double y2){
new Thread(new Runnable() {
@Override
public void run() {
try{
Thread.sleep(500);
}catch (Exception e){
e.printStackTrace();
}
String[] order = {"input", "swipe", "" + x1, "" + y1, "" + x2, "" + y2,};
try{
new ProcessBuilder(order).start();
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
}
2.再来调用
AutoTouch autoTouch = new AutoTouch();
autoTouch.autoClickPos(900,1800,920,1800);
来看看这个
new ProcessBuilder(order).start();
这就是让adb shell执行的代码 order 是要执行的命令
你可能会觉得不对呀 String[] order = {"input", "swipe", "" + x1, "" + y1, "" + x2, "" + y2,};
这swipe不是滑动的意思吗?我读书少你可别骗我。不好意思,我读书也不多,不过真的没有骗你;
真正的点击应该把swipe改为tap但是 但是 注意重点来了 但是这么用andriod没有反应 所以就只能用swipe
至于swipe这儿还有什么参数我在此简短的列出来
1.text 相当于输入内容;
2.keyevent 手机物理按键和屏幕按键
常见 input keyevent 3 表示home键
input keyevent 4表示back键
input keyevent 19 表示up键
input keyevent 24 表示volume+键
input keyevent 25 表示volume-键
3.tap 点击事件
input tap x y xy是点击的坐标 不过在android中tap好像失效了不知道为什么
4.swipe 滑动事件
input swipe x1 y1 x2 y2 x1 y1 起始坐标 x2 y2 滑动到的目标 我们在这儿就是这样来实现点击效果的。
方法二:这个方法需要获取root权限 依旧用到的是adb shell在此就不赘述了直接上代码:
private void exeShellcmd(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 (Exception e){
e.printStackTrace();
}
}
调用的时候 这样调用:
exeShellcmd("input swipe 900 1800 920 1800");
就说这么多啦,有问题可以一起交流哦