浅析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编程实现二级下拉菜单及快速搜索的方法。分享给大家供大家参考,具体如下:一、我们要做什么?上面有个搜索框,下面是一
- Chart控件可以用来绘制波形图、柱状图、饼图、折线图等,用来进行数据表现是很不错的简单说一下这个控件的使用方法效果图我们首先要加载Char
- 大家好,记得上次我带着大家一起实现了一个类似与淘宝客户端中带有的图片滚动播放器的效果,但是在做完了之后,发现忘了加入图片自动播放的功能(或许
- JAVA并发编程有界缓存的实现1、有界缓存的基类package cn.xf.cp.ch14;/** * *功能:有界缓存实现基类 *时间:
- 本文实例讲述了Java实现数据库连接池的方法。分享给大家供大家参考。具体如下:package com.kyo.connection;impo
- 描述输入一行字符串,分别统计出其中英文字母、空格、数字和其它字符的个数输入描述:控制台随机输入一串字符串输出描述:输出字符串中包含的英文字母
- 本文实例讲述了C#获取CPU编号的方法。分享给大家供大家参考。具体如下:/// <summary>/// Gets the cp
- 在上篇文章给大家介绍了使用XSD校验Mybatis的SqlMapper配置文件的方法(1),需要的朋友可以参考下。编写好XSD文件,然后来看
- 起因最近在写CRUD的时候,发现有个分页的VO写的健壮性比较差,一时手痒改了一下,没想到改了之后好几个功能都出现了问题。原VO关键代码如下:
- 总结:对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射):Type t = tc.GetType();//获得该类
- 实现效果:Form1.cs代码:using System;using System.Collections.Generic;using Sy
- 自定义转换器实现参数去空格1.自定义转换器类实现Converter<S, T>类,重写convert()方法,直接上代码。/**
- 一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail
- 本文实例讲述了C#创建一个Word并打开的方法。分享给大家供大家参考。具体实现方法如下:private static string _cre
- 本文为大家分享了Android Studio下载与安装的具体步骤,供大家参考,具体内容如下1.Android Studio下载地址:点击打开
- 简介java 8 stream作为流式操作有两种操作类型,中间操作和终止操作。这两种有什么区别呢?我们看一个peek的例子:Stream&l
- 本文所述代码是从一个C#程序中摘录出来的,主要实现C#创建目录、删除文件夹及文件的功能,包括所引用的名称空间等,特别是对C#不熟悉的初学者,
- 最近做项目中涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。 刚好把功能
- 描述符描述符是你添加到那些定义中来改变他们的意思的关键词。Java 语言有很多描述符,包括以下这些:可访问描述符不可访问描述符应用描述符,你