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执行上面的命令时,我能够在模拟器中生成click事件。是否有可能从Android代码生成相同的效果?任何人请帮助我。
答案 0 :(得分:1)
“sendevent”命令需要“root”或“su”权限。
我试图在this question中解决同样的问题,但我没有找到任何解决方案来模拟这种方式或只使用SDK工具的其他方式。
然而,还有另一种模拟触摸的方法,如this article中所述。
对于我自己的工作(app签名并作为系统应用程序运行):
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();
答案 1 :(得分:1)
我不知道在哪里放这个,但是如果有人在收到“发送”信息时遇到问题。使用首先发布在这里的方法在ICS上工作的代码我已经弄明白了如何做到这一点。它确实需要SU访问。对我来说问题至少是这个。
我将发布以下代码,然后解释每个部分。
当你做' getevent'为了在你的触摸板上获取触摸事件的十六进制代码(我的是/ dev / event1),它会发出一堆数据,从十六进制转换为十进制后,这些数据将如下所示。
第一组是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'谷歌一下。
我很高,这使得很难解释,但如果您是root用户,则以下代码将在4.0.4 ICS中提供的坐标上产生单个触摸事件。当然,你必须调整它以使其正确。下载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;
答案 2 :(得分:0)
您应该能够通过Runtime.exec()方法发出相同的shell命令: http://developer.android.com/reference/java/lang/Runtime.html