最近在在看怎么样让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");

就说这么多啦,有问题可以一起交流哦

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 重磅来袭!2020 年需要关注的 5 大 Android(安卓)开发技术,抓破脑袋
  3. Android的Linux“心”
  4. Android(安卓)的签名
  5. Android(安卓)Studio JNI学习之(3)-使用SWIG自动生成Jni代码
  6. Android学习之路——简易版微信为例(二)
  7. android中的数据存取-方式一:preference(配置)
  8. [原创] 在Android系统使用socket在framework和native之间通信
  9. Kivy A to Z -- 如何从Python创建一个基于Binder的Service及如何

随机推荐

  1. Android检测手机是否安装某个应用
  2. android取得手机屏幕大小DisplayMetrics
  3. android系统关机重启
  4. Android textView设置多倍行距
  5. Android开发周报:Android相机开发、内存泄
  6. webView 对 iframe 的兼容性问题
  7. android 彻底退出程序方法
  8. android webView 缩放
  9. android 文件 修改权限
  10. Android判断手机的当前网络