Android在任何地方模拟点击屏幕
来源:互联网 发布:美工做好图怎么上传 编辑:程序博客网 时间:2024/05/20 23:34
要求:
在Android上按像素位置进行模拟屏幕点击,无论前台程序是什么(类似于按键精灵)。
解决方案:
使用安卓中的linux命令行来进行模拟(可以完成目标但是不优雅)。
前提知识:
- ADB中可以使用”adb shell tap x y”来模拟点击
- Android代码中可以使用ProcessBuilder来执行命令行语句。
- 参考链接: Android通过代码模拟物理、屏幕点击事件 , Android adb shell 获得点击屏幕的位置坐标
示例代码:
package com.example.wkm.motioneventgenerator;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.os.Process;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;import android.view.MotionEvent;import android.widget.ImageView;import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final int width = getWindowManager().getDefaultDisplay().getWidth(); final int height = getWindowManager().getDefaultDisplay().getHeight(); //每10s产生一次点击事件,点击的点坐标为(0.2W - 0.8W,0.2H - 0.8 H),W/H为手机分辨率的宽高. new Thread(new Runnable() { @Override public void run() { while (true) { //生成点击坐标 int x = (int) (Math.random() * width * 0.6 + width * 0.2); int y = (int) (Math.random() * height * 0.6 + height * 0.2); //利用ProcessBuilder执行shell命令 String[] order = { "input", "tap", "" + x, "" + y }; try { new ProcessBuilder(order).start(); } catch (IOException e) { e.printStackTrace(); } //线程睡眠10s try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } /** * 打印点击的点的坐标 * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); Toast.makeText(this, "X at " + x + ";Y at " + y, Toast.LENGTH_SHORT).show(); return true; }}
后话(没时间就不用看后面的了,没有什么有用的)
看了一些游戏外挂相关的东西才对这些有了兴趣,本来想在代码里面通过API实现(我觉得那样比较优雅,直接shell命令太野蛮),但是现在的知识还不够。
我要实现的就是类似于按键精灵这种可以程序操纵手机的(手点的话太费事了),看了安卓手机微信抢红包后,稍微了解了一下,但是开始对游戏内容进行分析的时候发现这个策略行不通,因为游戏大都是动画制作的(比如unity3d等,我也不了解这些),这种跟微信那种纯Android组件构成的应用还不一样(因为游戏界面就不是由Android组件构成的),所以没办法我只能退而求其次简略地进行点击模拟来完成我的目的(目的就是不停地点屏幕,不过现在看来没有那么简单,还需要对当前的图形进行处理,感觉不该这么麻烦的)。不知道有没有别的可以用于修改,比如说检测内存这种,这都需要对安卓系统更加了解才行,需要多多学习。
有谁对这种(非Android组件构成的)游戏有什么了解的话,希望可以不吝赐教。
2 0
- Android在任何地方模拟点击屏幕
- 在任何地方部署Kubernetes
- 在任何地方获取程序的applicationContext。
- spring在任何地方使用request
- android 之 下载管理器 在任何地方监听进度设计思路
- Reachability用于在任何地方判断网络是否可用
- Reachability用于在任何地方判断网络是否可用
- android 模拟屏幕点击
- 在深圳为什么能在任何地方碰到SIAS的校友呢?
- 在任何地方获取多数据源hibernate session 的方法
- 在任何地方时候sql执行查询magento表(不走magento的模块)
- icanhazip.com 使你在任何地方知道你的公网IP地址
- 向左或向右滑动在任何地方一个UITableViewCell删除的单元格没有删除按钮?
- 防QQ可以在任何地方横向滑动的一个view
- 防坑:Mac VMware Fusion 下 windows 10虚拟机,在任何地方双击弹出开始菜单
- Android模拟点击屏幕,实现按键精灵点击屏幕功能
- Loki库读解 STATIC_CHECK扩展:可放在任何地方的STATIC_CHECK,编译期打印出类型的大小
- VC单文档多视图工程中,在任何地方访问某一指定视图类的方法
- Spark中RDD操作
- mysql中文乱码解决
- python time,datetime 操作
- 将php数组或者对象传递给js
- operator重载运算符
- Android在任何地方模拟点击屏幕
- javascript 属性的特性 二十五
- setTimeout延时0毫秒的作用
- TabLayout + ViewPager实现标签栏效果
- UVA 1099 Sharing Chocolate(记忆化搜索)
- 程序员在上海之一
- Android浏览器打开本地app前端同学的两种配置方式Url scheme和Android intent
- 对于继承的笔记
- Unity3D 5.x 启动过程中 License Error 解决办法