代码模拟屏幕点击、触摸事件
发布网友
发布时间:2022-12-20 09:59
我来回答
共1个回答
热心网友
时间:2023-09-27 19:31
最近需要实现一个功能,点击一个按钮,实现类型系统键盘的删除功能;有两种情形,
第一种情形:要删除的是editText中的内容,这个比较容易实现:
int keyCode = KeyEvent.KEYCODE_DEL;
KeyEvent keyEventDown =new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
KeyEvent keyEventUp =new KeyEvent(KeyEvent.ACTION_UP, keyCode);
editText.onKeyDown(keyCode, keyEventDown);
editText.onKeyUp(keyCode, keyEventUp);
第二种情形:要删除的是webview中的内容,上面的方式就行不通了,这个可以模拟系统键盘的按键事件来实现:
Instrumentationinstrumentation =new Instrumentation();
instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DEL);
注意:这个需要在子线程中执行,否则会报错,模拟触摸事件如下:
instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 300, 300, 0));
sendKeyDownUpSync(int key)内部调用了sendKeySync(KeyEvent event)方法,最终调用了 InputManager.getInstance().injectInputEvent(newEvent, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);方法;
该方法说明中有说明:
Requires {@link android.Manifest.permission.INJECT_EVENTS} to inject into
* windows that are owned by other applications.
也就是像其他applications注入事件时,才要求该权限;
另一种模拟键盘的方式如下:
try {
String keyCommand ="input keyevent " + KeyEvent.KEYCODE_DEL;
Runtimeruntime = Runtime.getRuntime();
Process proc =runtime.exec(keyCommand);
} catch (IOException e) {
e.printStackTrace();
}