Android上的模拟点击
16lz
2021-12-04
模拟点击在 Android 上有2种情况:
1,只模拟点击自己的页面;
2,只要自己进程活着,不管是哪个应用在前台,都可以模拟点击;
第一种情况比较简单:
long downTime = SystemClock.uptimeMillis(); float x = 200; float y = getResources().getDisplayMetrics().heightPixels - 200; final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0); final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x, y, 0); View view = findViewById(R.id.root); view.dispatchTouchEvent(downEvent); view.dispatchTouchEvent(upEvent); downEvent.recycle(); upEvent.recycle();
有人可能发现了,这第一种模拟点击自己的页面,貌似没什么意义,因为既然是自己的页面,代码都是我们自己写,可以直接走点击的方法,不需要这么麻烦。不过还是有些特殊场景可能需要的,比如模拟点击广告。
第二种情况:
1,之前写过一篇《牛逼的AccessibilityService》
2,如果是 root 手机或者是系统应用, 可以添加权限:
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
则可以使用:
AsyncTask.execute(new Runnable() { @Override public void run() { // 必须在 子线程 Instrumentation mInst = new Instrumentation(); mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0)); mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0)); } });
sendPointerSync 实际利用的是 InputManager 的 injectInputEvent 方法;
更多相关文章
- Android下模拟按键输入
- Android(安卓)获取存储卡路径和空间使用情况
- Android(安卓)无法查看外部依赖jar的源码的问题
- android开发 列表显示(ListView)
- ListItem更改背景色
- android 命令(adb shell)进入指定模拟器或设备
- android studio的问题整理(如何删除模块(Module))
- android studio调试c++代码
- android Button组件的属性和方法