`

向系统注入两点触摸事件

 
阅读更多
之前遇到的问题:向系统发送一个长按触摸事件,再发送其他触摸事件时之前的长按事件消失。不多说,直接上代码,用到了测试类Instrumentation,可在上层直接执行,但仅限于当前程序!

package com.zfibs.touch;

import android.app.Instrumentation;
import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
import android.view.MotionEvent.PointerCoords;
import android.view.MotionEvent.PointerProperties;

public class Test {
	//向系统注入两点触摸事件
	private String TAG = "__Test__";

	PointerProperties[] properties = new PointerProperties[2];
	PointerProperties pp1 = new PointerProperties();
	PointerProperties pp2 = new PointerProperties();
	PointerCoords[] pointerCoords = new PointerCoords[2];

	Test() {
	}

	public void handleTouch(String args[]) throws Exception {
		String[] mArgs = args;
		try {
			String opt = mArgs[0];
			if (opt.equals("onetouch")) {
				long downTime = SystemClock.uptimeMillis();
				long eventTime = SystemClock.uptimeMillis();
				float x = Float.valueOf(mArgs[1]);
				float y = Float.valueOf(mArgs[2]);
				int type = Integer.valueOf(mArgs[mArgs.length - 1]);
			    PointerProperties pp1 = new PointerProperties();
			    pp1.id = 0;
			    pp1.toolType = MotionEvent.TOOL_TYPE_FINGER;
			    properties[0] = pp1;
			    
				PointerCoords pc1 = new PointerCoords();
				pc1.x = x;
				pc1.y = y;
				pc1.pressure = 1;
				pc1.size = 1;
				pointerCoords[0] = pc1;
				
				Log.i(TAG, "__one PointTouch__" + x + "___" + y + "___");
				MotionEvent event = null;
				if(type == 0){
					event = MotionEvent.obtain(downTime, eventTime,
							MotionEvent.ACTION_DOWN, 1, properties, pointerCoords,
							0, 0, 1, 1, 0, 0, 0, 0);
				}else{
					event = MotionEvent.obtain(downTime, eventTime,
							MotionEvent.ACTION_UP, 1, properties, pointerCoords,
							0, 0, 1, 1, 0, 0, 0, 0);
				}
				sendPointerTest(event);
			} else if (opt.equals("twotouch")) {
				long downTime = SystemClock.uptimeMillis();
				long eventTime = SystemClock.uptimeMillis();
				float x = Float.valueOf(mArgs[1]);
				float y = Float.valueOf(mArgs[2]);
				int type = Integer.valueOf(mArgs[mArgs.length - 1]);
			    PointerProperties pp2 = new PointerProperties();
			    pp2.id = 1;
			    pp2.toolType = MotionEvent.TOOL_TYPE_FINGER;
			    properties[1] = pp2;
			    
				PointerCoords pc2 = new PointerCoords();
				pc2.x = x;
				pc2.y = y;
				pc2.pressure = 1;
				pc2.size = 1;
				pointerCoords[1] = pc2;
				
				Log.i(TAG, "__two PointTouch__" + x + "___" + y + "___");
				MotionEvent event = null;
				if (type == 0) {
					event = MotionEvent.obtain(downTime, eventTime,
							MotionEvent.ACTION_POINTER_2_DOWN, 2, properties,
							pointerCoords, 0, 0, 1, 1, 0, 0, 0, 0);
				} else {
					event = MotionEvent.obtain(downTime, eventTime,
							MotionEvent.ACTION_POINTER_2_UP, 2, properties,
							pointerCoords, 0, 0, 1, 1, 0, 0, 0, 0);
				}
				sendPointerTest(event);
			}
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
	}

	public static void sendPointerTest(MotionEvent event) {
		try {
			Instrumentation inst = new Instrumentation();
			inst.sendPointerSync(event);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


如果要跨进程发送模拟事件,需调用:
	private static void sendPointerSync(MotionEvent event) {
		try {
			(IWindowManager.Stub.asInterface(ServiceManager
					.getService("window"))).injectPointerEvent(event, true);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

需在源码中编译生成jar包,root权限下降jar导入/system/framework/下,方可调用。
分享到:
评论
1 楼 Evilover3 2012-12-24  
请问是在2.3及以上版本上才可以用吗

相关推荐

    基于C#的触摸屏餐饮管理系统源码.zip

    【标题】: "基于C#的触摸屏餐饮管理系统源码" 这个标题表明我们正在讨论一个使用C#编程语言开发的餐饮管理系统,它专为触摸屏设备设计,可能包含点餐、结账、库存管理等功能。C#是一种面向对象的编程语言,由微软...

    基于ARM的红外多点触摸屏设计.pdf

    该算法通过调整扫描方式,使得当有大障碍物遮挡触摸屏时,系统仍然能够依靠未被遮挡的单个轴进行有效的触控点定位。这样即便在复杂的使用环境下,比如大面积遮挡物存在的情况下,红外触摸屏也能够保持正常的运行和...

    行业资料-电子功用-包含行或列的双注入电子装置的大尺寸矩阵触摸表面的说明分析.rar

    这两个电注入层交叉形成一个矩阵,使得每一个交叉点都能独立检测到触控事件。这样的设计极大地提高了触摸屏的分辨率和精度,能够准确识别多点触控和复杂的手势操作。 接着,大尺寸矩阵触摸表面的设计与实现是技术的...

    电子-一种电容式触摸屏的贴合方法

    湿贴合则是在两层之间注入胶水,然后在一定温度和压力下固化,这种方法适合大尺寸屏幕的组装。 一种可能的创新贴合方法是采用热压贴合技术,通过精确控制温度和压力,使得OCA胶均匀扩散,消除气泡,提高屏幕的整体...

    DLT8SA15A 电容式触摸感应控制芯片规格书

    参考应用电路的设计,提供了15入2出IIC输出方式和8入8出点对点输出方式两种配置,迎合了不同系统的需求。 在实际应用中,DLT8SA15A电容式触摸感应控制芯片的运用原则和注意事项同样重要。首先,正确选择绝缘材料是...

    显示/光电技术中的基于电容式触摸屏系统介绍及相关解决方案

    除了基本的电容式触摸屏技术,Atmel公司(已被Microchip Technology收购)推出的QTouch技术为电容式触摸屏领域注入了新的活力。QTouch技术利用电荷传输原理,可以实现对触摸和接近的识别,特别适用于各种复杂的应用...

    电信设备-模拟触屏移动终端按键的方法和系统.zip

    软件模拟主要通过开发工具或自动化测试框架实现,例如Android的Monkey测试工具,它可以随机生成触摸事件来模拟用户操作。硬件仿真则涉及到物理设备的模拟,如使用USB或蓝牙连接的外设来模拟触控输入。 在电信设备中...

    通用WAP网站生成系统

    10. **安全性**:虽然WAP网站主要用于简单浏览,但系统仍需考虑安全问题,如防止跨站脚本攻击(XSS)、SQL注入等,确保用户数据的安全。 51ni8.com可能是该系统的示例网址,用于展示其功能和效果。了解这些知识点后...

    西门子PLC例程-知名品牌EVA注射成型机触摸屏程序+S7-300 PLC程序.zip

    以下是关于这两个关键部分的详细解释和相关知识点: 1. EVA注射成型机: EVA注射成型机是一种专门用于生产EVA制品的设备,如鞋底、体育用品等。该机器通过高温将EVA颗粒熔化后注入模具,冷却成型。其工作流程通常...

    多种液体自动混合控制装置(三菱PLC).pdf

    以下是相关知识点的详细说明: 1. **三菱PLC**:三菱PLC(可编程逻辑控制器)是一种专为工业环境设计的数字运算操作电子系统。它用于控制各种机械或生产过程,通过数字或模拟输入/输出来控制各种类型的设备。三菱是...

    基于PLC的造纸机同步控制系统设计.doc

    本设计将系统的工作模式分为手动模式和自动模式两种。手动模式主要用于系统硬件的检测与调试,以确保设备能够稳定可靠地运行;而自动模式则更侧重于生产过程的自动化控制,通过触摸屏即可完成对系统的监控与调节,...

    基于MATLAB仪器控制工具箱的SAW标签阅读器系统设计.pdf

    标题中提及的“基于MATLAB仪器控制工具箱的SAW标签阅读器系统设计”涉及了几个关键技术点:MATLAB仪器控制工具箱、SAW(声表面波)技术、标签阅读器系统设计。 描述部分首先解释了声表面波(SAW)技术的基本原理,...

    java安卓开发外卖订餐系统课程设计.docx

    本产品是一款面向高校学生的外卖订餐系统,主要包括Web端管理和Android客户端操作两个部分。 ##### 2 综合描述 ###### 2.1 产品的状况 系统目前处于需求分析阶段,已完成初步的需求收集和整理工作。 ###### 2.2 ...

    DoubleSeeBar.zip

    在这个案例中,"DoubleSeekBar.java"应该是对SeekBar类的扩展,创建一个新的类,增加两个独立的滑块和相关的触摸事件处理。开发者可能重写了onTouchEvent()方法来处理双滑块的拖动行为,同时也可能添加了监听器接口...

    学做智能车挑战飞思卡尔之系统调试PPT学习教案.pptx

    - **信号注入法**:通过外部注入信号,观察电路响应,帮助找出故障点。 - **其他方法**:观察元件外观,听取工作声音,嗅闻异常气味,触摸器件温度,这些感官检查也能提供故障线索。 3. **调试思路**:调试采用...

    Android高级应用源码-Android双向滑动菜单带按钮版.zip

    在双向滑动菜单中,需要确保当用户滑动时,触摸事件被正确捕获并执行相应的滑动操作,同时不影响其他子视图的正常交互。 4. **动画效果**: 为了提供良好的用户体验,滑动菜单通常会伴随着动画效果。这可能通过`...

    触摸式延迟开关设计

    接着,BG2的集电极电压下降,导致BG1也导通,进而通过BG1向可控硅的控制极注入触发电流,使可控硅开通,电灯H点亮。 在电灯点亮的瞬间,电容C1通过BG2的c-e极间并联在DW两端,被快速充电至约12V。即使手指离开M,C1...

    Android应用源码(精)某行九宫格锁屏模块源码.zip

    2. **绘制路径**:用户在九宫格上滑动手指时,需要记录下触摸事件并绘制出路径。这需要在Activity的onTouchEvent()方法中处理,通过MotionEvent的ACTION_DOWN、ACTION_MOVE和ACTION_UP事件来追踪用户的触控轨迹。 3...

    Android页里面的元素都能被拖动的view.zip

    1. **自定义View或ViewGroup**:首先,你需要创建一个自定义的View或ViewGroup,覆盖其`onTouchEvent()`方法来处理触摸事件。在这里,你需要解析用户的滑动手势,判断是否触发拖动操作。 2. **手势检测**:使用...

    送给女朋友的小程序 小游戏 c# c++ 表达爱情 耍点小坏 小可爱

    标题中的“送给女朋友的小程序 小游戏 c# c++ 表达爱情 耍点小坏 小可爱”表明这是一个特别设计的程序,用于在浪漫的场合,如生日或者表白时,向另一半表达爱意。这个小程序或小游戏的开发语言包括C#和C++,这两种都...

Global site tag (gtag.js) - Google Analytics