[Android] android 中模擬click&touch的方法
使用shell方法adb shell #进入系统
input keyevent KEYCODE_BACK #模拟按返回键
input keyevent KEYCODE_HOME #模拟按Home键input tap 100 200 #在屏幕坐标(100, 200)处点击
- 使用instrument
需要注意的是,这些方法均不可以在UI主线程中执行,必须放到子线程中调用,否则就会报错。另外,使用上面的方法,需要在AndroidManifast.xml中申明如下权限:
1
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
Instrumentation mInst = new Instrumentation();
mInst.sendKeyDownUpSync(KeyEvent.KEYCODE_CAMERA); //clickInstrumentation mInst = new Instrumentation();
mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0); //x,y 即是事件的坐标
mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键
sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键
sendPointerSync(MotionEvent event) //用于模拟Touch
sendStringSync(String text) //用于发送字符串 - 使用android 內部api
try { InputManager im = (InputManager) InputManager.class.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]); Method injectInputEventMethod = InputManager.class.getMethod("injectInputEvent", new Class[]{InputEvent.class, Integer.TYPE}); // 獲取當前系統時間作為事件的時間戳 long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); // 指定動作類型(ACTION_DOWN 表示開始觸摸,ACTION_UP 表示結束觸摸) int actionDown = MotionEvent.ACTION_DOWN; int actionUp = MotionEvent.ACTION_UP; // 創建 MotionEvent MotionEvent motionEventDown = MotionEvent.obtain( downTime, eventTime, actionDown, x, y, 0 ); MotionEvent motionEventUp = MotionEvent.obtain( downTime, eventTime+100, actionUp, x, y, 0 ); // 注入 MotionEvent injectInputEventMethod.invoke(im, new Object[]{motionEventDown, Integer.valueOf(0)}); injectInputEventMethod.invoke(im, new Object[]{motionEventUp, Integer.valueOf(0)}); // 回收 MotionEvent 以釋放資源 motionEventDown.recycle(); motionEventUp.recycle(); }catch (Exception e){ Log.e(TAG, "getInputManager: "+ e.toString()); } URL: https://itimetraveler.github.io/2016/06/02/%E3%80%90Android%E3%80%91%E6%8A%80%E6%9C%AF%E8%B0%83%E7%A0%94%EF%BC%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E6%A8%A1%E6%8B%9F%E5%B1%8F%E5%B9%95%E7%82%B9%E5%87%BB%E3%80%81%E8%A7%A6%E6%91%B8%E4%BA%8B%E4%BB%B6/
留言
張貼留言