adb shell sendevent /dev/input/event0 3 0 45
adb shell sendevent /dev/input/event0 3 1 784
adb shell sendevent /dev/input/event0 1 330 1
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 1 330 0
adb shell sendevent /dev/input/event0 0 0 0
有什么方法可以通过Android代码调用sendevent?当我从Shell执行上面的命令时,我能够在模拟器中生成单击事件。是否可以从Android代码产生相同的效果?任何人请帮助我。
" sendevent"命令单击(或触摸)事件需要" root"或" su"权限。
我试图在这个问题中解决相同的问题,但是我找不到任何使用SDK工具以这种方式或任何其他方式模拟触摸的解决方案。
但是,还有另一种模拟触摸的方法。
我自己工作下一个工作(应用程序签名并作为系统应用程序运行):
Thread thread = new Thread(){
@Override
public void run(){
try {
this.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendPointerSync(MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN,posx, posy, 0));
m_Instrumentation.sendPointerSync(MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_UP,posx, posy, 0));
}
};
thread.start();
我不知道要把它放在哪里,但是如果有人在使用首先发布的方法来获取'sendevent'代码在IC上工作的问题,我已经弄清楚了如何做它。不过,它确实需要SU访问。至少对我的问题是这个。
我将在下面发布代码,然后说明每个部分。
当您进行" getevent"以在触摸板上获取触摸事件的十六进制代码(Mine as/dev/event1)时,它会吐出一堆数据,这些数据在从十六进制转换为DEC后将看起来像这样。
第一组是7行,下一组是一个单触摸事件的9行。为什么?没有线索。语法是此(设备)(1、3或0,不理解)(值,这可能意味着很多。58在我的情况下是我设备的标识符,53和54表示坐标是值(值)(值)(值),等)
sendevent /dev/input/event1 3 58 255 #means '3, variable 58 is 255'
sendevent /dev/input/event1 3 53 534 #'3, variable 53 (x axis) is 534
sendevent /dev/input/event1 3 54 321 #'3, variable 54 (y axis) is 534
sendevent /dev/input/event1 3 48 8 #'3, variable 48 (pressure maybe) is 8
sendevent /dev/input/event1 0 2 0 #i think the 0,2,0 means 'finger down or up
sendevent /dev/input/event1 1 330 1 #this, followed by 0,0,0 means 'end of event'
sendevent /dev/input/event1 0 0 0
与所有这些相同,接受这是事件的另一端,如果第一部分意味着#'他放下手指'这意味着'他拿起它。
sendevent /dev/input/event1 3 58 0
sendevent /dev/input/event1 3 53 534
sendevent /dev/input/event1 3 54 321
sendevent /dev/input/event1 3 48 8
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 330 0
sendevent /dev/input/event1 0 2 0
sendevent /dev/input/event1 0 0 0
乍一看,这似乎是我出错的两个不同的触摸事件。实际上,这是"呼叫和接听情况类型"。此代码将产生一个触摸事件。顺便说一下,我使用shell脚本和smanager来获取此功能,而不必自己破译十六进制数据,它被称为" sendeventgetevent.sh" google it。
我很难解释,但是以下代码(如果您是根)将在4.0.4 IC中提供的坐标上产生一个触摸事件。当然,您必须对其进行调整以使其正确。下载sendeventgetevent.sh,使用Smanager之类的脚本管理器运行它并摇滚。
$su
sendevent /dev/input/event1 3 58 255;
sendevent /dev/input/event1 3 53 534;
sendevent /dev/input/event1 3 54 321;
sendevent /dev/input/event1 3 48 8;
sendevent /dev/input/event1 0 2 0;
sendevent /dev/input/event1 1 330 1;
sendevent /dev/input/event1 0 0 0;
sendevent /dev/input/event1 3 58 0;
sendevent /dev/input/event1 3 53 534;
sendevent /dev/input/event1 3 54 321;
sendevent /dev/input/event1 3 48 8;
sendevent /dev/input/event1 0 2 0;
sendevent /dev/input/event1 0 0 0;
sendevent /dev/input/event1 1 330 0;
sendevent /dev/input/event1 0 2 0;
sendevent /dev/input/event1 0 0 0;
您应该能够通过runtime.exec()方法发布同一shell命令:http://developer.android.com/reference/java/lang/runtime.html