Android Instrumentation模拟鼠标点击事件
2012-11-08 15:50
441 查看
看了几遍网上的博客一直没有 模拟出鼠标点击事件和按钮事件,后来抱着试试态度再重试的时候终于有所斩获。下面把具体的情况记录一下:
首先我们必须了解类 Instrumentation:
Instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:
sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键
sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键
sendPointerSync(MotionEvent event) //用于模拟Touch
sendStringSync(String text) //用于发送字符串
注意:以上函数必须通过Message的形式抛到Message队列中。如果直接进行调用加会导致程序崩溃。
小结:Android instrumentation 只能在当前Acitivity上模拟事件
MotionEvent.ACTION_MOVE
MotionEvent.ACTION_DOWN
MotionEvent.ACTION_UP
直接这个是不会有MotionEvent.ACTION_UP这个事件的,必须先按下MotionEvent.ACTION_DOWN才会有MotionEvent.ACTION_UP事件产生
Android 各个View之间的消息传递使用dispatchTouchEvent();
还得记住在配置文件中添加 <uses-permission android:name="android.permission.INJECT_EVENTS" />这个权限。如果你想讲你的鼠标事件作用到另外一个应用程式那么你需要在另外一个应用程式的配置文件中也加上这个权限,否则将报错。 这里使用上面进行模拟鼠标事件时一定记得try{} catch()避免程式崩溃。
还要注意一点的是这个事件被自动分配到最上层的view上,因此如果你要模拟一个鼠标的话出发的点必须保证不会落在你绘制的图标view上面,否则事件会被突变view截获。
首先我们必须了解类 Instrumentation:
Instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:
sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键
sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键
sendPointerSync(MotionEvent event) //用于模拟Touch
sendStringSync(String text) //用于发送字符串
注意:以上函数必须通过Message的形式抛到Message队列中。如果直接进行调用加会导致程序崩溃。
小结:Android instrumentation 只能在当前Acitivity上模拟事件
MotionEvent.ACTION_MOVE
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, offetX, offetY, 0)); nst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, offetX, offetY, 0)); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, offetX, offetY, 0));
MotionEvent.ACTION_DOWN
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, offetX, offetY, 0)); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, offetX, offetY, 0));
MotionEvent.ACTION_UP
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, offetX, offetY, 0));
直接这个是不会有MotionEvent.ACTION_UP这个事件的,必须先按下MotionEvent.ACTION_DOWN才会有MotionEvent.ACTION_UP事件产生
Android 各个View之间的消息传递使用dispatchTouchEvent();
还得记住在配置文件中添加 <uses-permission android:name="android.permission.INJECT_EVENTS" />这个权限。如果你想讲你的鼠标事件作用到另外一个应用程式那么你需要在另外一个应用程式的配置文件中也加上这个权限,否则将报错。 这里使用上面进行模拟鼠标事件时一定记得try{} catch()避免程式崩溃。
还要注意一点的是这个事件被自动分配到最上层的view上,因此如果你要模拟一个鼠标的话出发的点必须保证不会落在你绘制的图标view上面,否则事件会被突变view截获。
相关文章推荐
- Android Instrumentation模拟鼠标点击事件
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- android 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android自动化测试初探: 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android 代码模拟ListView item的点击事件的两种方式
- design principle:模拟 android Button 控件点击事件
- android ADB 模拟手机点击事件
- 使用jQuery模拟鼠标点击a标签事件
- PC通过ADB控制Android手机模拟点击,滑动,输入等事件(包括控制多台Android手机)
- [Android]通过adb shell input上报命令模拟屏幕点击事件
- Android adb 模拟滑动 按键 点击事件
- C#任意位置 模拟鼠标 点击 事件 并获取 鼠标 位置 源码
- android 模拟鼠标/按键事件
- Android如何基于坐标对View进行模拟点击事件详解
- Android代码模拟物理、屏幕点击事件
- Android通过代码模拟物理、屏幕点击事件
- Js 模拟鼠标点击事件