之前遇到的问题:向系统发送一个长按触摸事件,再发送其他触摸事件时之前的长按事件消失。不多说,直接上代码,用到了测试类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/下,方可调用。
分享到:
相关推荐
【标题】: "基于C#的触摸屏餐饮管理系统源码" 这个标题表明我们正在讨论一个使用C#编程语言开发的餐饮管理系统,它专为触摸屏设备设计,可能包含点餐、结账、库存管理等功能。C#是一种面向对象的编程语言,由微软...
该算法通过调整扫描方式,使得当有大障碍物遮挡触摸屏时,系统仍然能够依靠未被遮挡的单个轴进行有效的触控点定位。这样即便在复杂的使用环境下,比如大面积遮挡物存在的情况下,红外触摸屏也能够保持正常的运行和...
这两个电注入层交叉形成一个矩阵,使得每一个交叉点都能独立检测到触控事件。这样的设计极大地提高了触摸屏的分辨率和精度,能够准确识别多点触控和复杂的手势操作。 接着,大尺寸矩阵触摸表面的设计与实现是技术的...
湿贴合则是在两层之间注入胶水,然后在一定温度和压力下固化,这种方法适合大尺寸屏幕的组装。 一种可能的创新贴合方法是采用热压贴合技术,通过精确控制温度和压力,使得OCA胶均匀扩散,消除气泡,提高屏幕的整体...
参考应用电路的设计,提供了15入2出IIC输出方式和8入8出点对点输出方式两种配置,迎合了不同系统的需求。 在实际应用中,DLT8SA15A电容式触摸感应控制芯片的运用原则和注意事项同样重要。首先,正确选择绝缘材料是...
除了基本的电容式触摸屏技术,Atmel公司(已被Microchip Technology收购)推出的QTouch技术为电容式触摸屏领域注入了新的活力。QTouch技术利用电荷传输原理,可以实现对触摸和接近的识别,特别适用于各种复杂的应用...
软件模拟主要通过开发工具或自动化测试框架实现,例如Android的Monkey测试工具,它可以随机生成触摸事件来模拟用户操作。硬件仿真则涉及到物理设备的模拟,如使用USB或蓝牙连接的外设来模拟触控输入。 在电信设备中...
10. **安全性**:虽然WAP网站主要用于简单浏览,但系统仍需考虑安全问题,如防止跨站脚本攻击(XSS)、SQL注入等,确保用户数据的安全。 51ni8.com可能是该系统的示例网址,用于展示其功能和效果。了解这些知识点后...
以下是关于这两个关键部分的详细解释和相关知识点: 1. EVA注射成型机: EVA注射成型机是一种专门用于生产EVA制品的设备,如鞋底、体育用品等。该机器通过高温将EVA颗粒熔化后注入模具,冷却成型。其工作流程通常...
以下是相关知识点的详细说明: 1. **三菱PLC**:三菱PLC(可编程逻辑控制器)是一种专为工业环境设计的数字运算操作电子系统。它用于控制各种机械或生产过程,通过数字或模拟输入/输出来控制各种类型的设备。三菱是...
本设计将系统的工作模式分为手动模式和自动模式两种。手动模式主要用于系统硬件的检测与调试,以确保设备能够稳定可靠地运行;而自动模式则更侧重于生产过程的自动化控制,通过触摸屏即可完成对系统的监控与调节,...
标题中提及的“基于MATLAB仪器控制工具箱的SAW标签阅读器系统设计”涉及了几个关键技术点:MATLAB仪器控制工具箱、SAW(声表面波)技术、标签阅读器系统设计。 描述部分首先解释了声表面波(SAW)技术的基本原理,...
本产品是一款面向高校学生的外卖订餐系统,主要包括Web端管理和Android客户端操作两个部分。 ##### 2 综合描述 ###### 2.1 产品的状况 系统目前处于需求分析阶段,已完成初步的需求收集和整理工作。 ###### 2.2 ...
在这个案例中,"DoubleSeekBar.java"应该是对SeekBar类的扩展,创建一个新的类,增加两个独立的滑块和相关的触摸事件处理。开发者可能重写了onTouchEvent()方法来处理双滑块的拖动行为,同时也可能添加了监听器接口...
- **信号注入法**:通过外部注入信号,观察电路响应,帮助找出故障点。 - **其他方法**:观察元件外观,听取工作声音,嗅闻异常气味,触摸器件温度,这些感官检查也能提供故障线索。 3. **调试思路**:调试采用...
在双向滑动菜单中,需要确保当用户滑动时,触摸事件被正确捕获并执行相应的滑动操作,同时不影响其他子视图的正常交互。 4. **动画效果**: 为了提供良好的用户体验,滑动菜单通常会伴随着动画效果。这可能通过`...
接着,BG2的集电极电压下降,导致BG1也导通,进而通过BG1向可控硅的控制极注入触发电流,使可控硅开通,电灯H点亮。 在电灯点亮的瞬间,电容C1通过BG2的c-e极间并联在DW两端,被快速充电至约12V。即使手指离开M,C1...
2. **绘制路径**:用户在九宫格上滑动手指时,需要记录下触摸事件并绘制出路径。这需要在Activity的onTouchEvent()方法中处理,通过MotionEvent的ACTION_DOWN、ACTION_MOVE和ACTION_UP事件来追踪用户的触控轨迹。 3...
1. **自定义View或ViewGroup**:首先,你需要创建一个自定义的View或ViewGroup,覆盖其`onTouchEvent()`方法来处理触摸事件。在这里,你需要解析用户的滑动手势,判断是否触发拖动操作。 2. **手势检测**:使用...
标题中的“送给女朋友的小程序 小游戏 c# c++ 表达爱情 耍点小坏 小可爱”表明这是一个特别设计的程序,用于在浪漫的场合,如生日或者表白时,向另一半表达爱意。这个小程序或小游戏的开发语言包括C#和C++,这两种都...