`

Android 模拟键盘鼠标事件(Socket+Instrumentation实现)

阅读更多

通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:

  * Socket编程:实现PC和Emulator通讯,并进行循环监听

  * Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的。这里要说明的是启动服务有两种方式,bindService和startService,两者的区别是,前者会使启动的Service随着启动Service的Activity的消亡而消亡,而startService则不会这样,除非显式调用stopService,否则一直会在后台运行因为Service需要通过一个Activity来进行启动,所以采用startService更适合当前的情形

  * Instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:

  sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键

  sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键

  sendPointerSync(MotionEvent event) //用于模拟Touch

  sendStringSync(String text) //用于发送字符串

  注意:以上函数必须通过Message的形式抛到Message队列中。如果直接进行调用加会导致程序崩溃。

  对于Socket编程和Service网上有很多成功的范例,此文不再累述,下面着重介绍一下发送键盘鼠标模拟事件的代码:

  1.发送键盘KeyCode:

  步骤1. 声明类handler变量

 

private static Handler handler;

 

  步骤2. 循环处理Message

 

//在Activity的onCreate方法中对下列函数进行调用
private void createMessageHandleThread(){
//need start a thread to raise looper, otherwise it will be blocked
Thread t = new Thread() {
public void run() {
Log.i( TAG,"Creating handler ..." );
Looper.prepare();
handler = new Handler(){
public void handleMessage(Message msg) {
//process incoming messages here
}
};
Looper.loop();
Log.i( TAG, "Looper thread ends" );
}
};
t.start();
}

 

  步骤3. 在接收到Socket中的传递信息后抛出Message

 

handler.post( new Runnable() {
public void run() {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
}
} );

 

  2.Touch指定坐标,如下例子即touch point(240,400)

 

Instrumentation inst=new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 240, 400, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 240, 400, 0));

 

  3.模拟滑动轨迹

  将上述方法中间添加 MotionEvent.ACTION_MOVE

分享到:
评论

相关推荐

    浅析Android 模拟键盘鼠标事件

    通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:Socket编程:实现PC和Emulator通讯,并进行循环监听Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的。...

    Android系统模拟触摸按键

    博文源码《Android基于Socket无线遥控(2)--无线控制篇》 http://blog.csdn.net/zzp16/article/details/7939852 为Android系统添加模拟按键对外接口

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    Android中Hook Instrumentation 的实现

    参考博客 【Android中Hook Instrumentation 的实现】 http://blog.csdn.net/u012341052/article/details/71191409

    android-support-multidex-instrumentation.jar.zip

    android-support-multidex-instrumentation.jar.zip

    DevComponents.DotNetBar9.0 + TreeGX + Instrumentation

    经测试可以使用,效果不错。TreeGX效果不错。

    android-support-multidex-instrumentation.jar

    android-support-multidex-instrumentation.jar android-support-multidex-instrumentation.jar

    源码

    《AndroidStudio单元测试——instrumentation》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38060361

    android实现按键精灵

    这只是个很简单demo程序,实现按键精灵原理,按照这种方法可以跨进程传递点击事件

    Android开发资料合集-World版!

    9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...

    Android 开发技巧

    9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...

    android开发种点击Button按钮,怎么就跳转到menu上的两种方法源代码

    Instrumentation提供了一系列以send开头的方法来实现模拟键盘事件,我们可以使用这些方法来模拟点击menu按钮的效果。下面是一个简单的示例代码: ```java myButton3.setOnClickListener(new Button.OnClickListener...

    Java Instrumentation笔记

    有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了...

    instrumentation

    Instrumentation可以把测试包和目标测试应用加载到同一个进程中运行。既然各个控件和测试代码都运行在同一个进程中了,测试代码当然就可以调用这些控件的方法了,同时修改和验证这些控件的一些数据

    Iocomp.Instrumentation.WF40

    Iocomp.Instrumentation.WF40.Common.dll,Iocomp.Instrumentation.WF40.Pro Iocomp.WF40.OPC

    android 使用uinput模拟输入设备的方法

    在google remote中,android接收端接收socket发来的IR CODE,然后将IR CODE模拟出来发给系统处理,这就是google remote接收端的原理。 系统端怎样模拟input event呢? 方法一:通过Instrumentation....

    Android中三种注入事件方法比较

    主要介绍了Android中三种注入事件方法比较,本文分别讲解了使用内部APIs、使用instrumentation对象、直接注入事件到设备/dev/input/eventX等3种方法,需要的朋友可以参考下

    基于 Java Instrumentation + Javaassist 的简单 RASP.zip

    基于 Java Instrumentation + Javaassist 的简单 RASP

    instrumentation_demo.7z

    使用instrumentation创建测试用例示例代码

Global site tag (gtag.js) - Google Analytics