浅析Android 模拟键盘鼠标事件

时间:2022-12-19 00:11:14 

通过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网上有很多成功的范例,此文不再累述,下面着重介绍一下发送键盘鼠标模拟事件的代码:

发送键盘KeyCode:
步骤1. 声明类handler变量
private static Handler handler;
步骤2. 循环处理Message
java代码:


[font=宋体]//在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();   //主线程创建时,会创建一
个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue。其他非主线程,不会自动创建Looper,要需要的时候,通过调
用prepare函数来实现。
handler = new Handler(){
public void handleMessage(Message msg) {
//process incoming messages here
}
};
Looper.loop();
Log.i( TAG, "Looper thread ends" );
}
};
t.start();
}[/font]


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


[font=宋体]handler.post( new Runnable() {
public void run() {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
}
} );[/font]


Touch指定坐标,如下例子即
java代码:


[font=宋体]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));[/font]


模拟滑动轨迹
将上述方法中间添加 MotionEvent.ACTION_MOVE

标签:android,鼠标事件
0
投稿

猜你喜欢

  • CDMA 猫用AT命令发中文短信(C#)

    2021-07-22 08:19:46
  • 一篇文章带你深入了解javaIO基础

    2022-10-22 21:43:05
  • kill命令在Java应用中使用的注意事项小结

    2023-11-11 13:01:55
  • Java针对ArrayList自定义排序的2种实现方法

    2022-01-30 03:47:34
  • Android使用ViewDragHelper实现QQ6.X最新版本侧滑界面效果实例代码

    2022-10-14 08:38:22
  • 浅谈Java方法调用的优先级问题

    2023-07-01 13:40:08
  • 快速解决Android适配底部返回键等虚拟键盘的问题

    2021-10-25 14:50:23
  • Java中的内部类你了解吗

    2022-12-11 08:29:10
  • C#基础 延迟加载介绍与实例

    2023-07-24 19:16:14
  • Java取整与四舍五入

    2021-07-25 01:07:32
  • sms4j 2.0 全新来袭功能的调整及maven变化详解

    2023-11-05 00:31:51
  • java图的深度优先遍历实现随机生成迷宫

    2023-06-26 06:06:05
  • Android编程开发中ListView的常见用法分析

    2022-04-15 09:52:07
  • 深入浅析java中finally的用法

    2023-06-14 00:03:35
  • Android中ListView如何分页加载数据

    2023-09-08 18:44:35
  • C#画图之饼图折线图的实现方法

    2021-12-05 22:26:13
  • 老生常谈Java 网络编程 —— Socket 详解

    2023-07-12 16:32:54
  • java生成验证码图片的方法

    2023-12-09 08:57:15
  • Java日常练习题,每天进步一点点(53)

    2023-08-12 00:55:00
  • java实现单人版五子棋游戏

    2021-09-03 03:24:20
  • asp之家 软件编程 m.aspxhome.com