在android中,我使用sendevent来模拟点击和拖动事件。代码是:
String[] events = new String[7];
events[0] = "sendevent /dev/input/event1 3 57 0";
events[1] = "sendevent /dev/input/event1 3 53 " + x1;
events[2] = "sendevent /dev/input/event1 3 54 " + y1;
events[3] = "sendevent /dev/input/event1 3 58 31";
events[4] = "sendevent /dev/input/event1 3 50 2";
events[5] = "sendevent /dev/input/event1 0 2 0";
events[6] = "sendevent /dev/input/event1 0 0 0";
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
for (String event : events) {
os.writeBytes(event + "\n");
os.flush();
}
是的,它可以达到效果,但是它非常慢而且不稳定,每个sendevent都会有一个新的进程来完成它。
然后我在https://www.assembla.com/code/android-gb-for-sharp-is01/git/nodes/debug/system/core/toolbox/sendevent.c中找到sendevent源,它用c编写,每次打开一个文件并写入参数,每次都会创建一个新的进程,所以我有了一个想法,将sendevent重写为Java并直接在android代码中使用,只需打开一次文件并写入所有参数。
可行吗?它能加速我的代码吗?
最佳答案
是的,这是可行的,您需要模拟表示输入事件结构的字节序列,并将其写入名为/dev/input/event1
的文件。它应该会大大加快您的代码速度,因为外壳处理是一个非常昂贵的操作。
这个问题(Using C struct in Java)有很多关于C结构和Java之间合作的有用信息。
顺便说一句,同时我看了一下Preon(我不知道那个图书馆),它看起来真的很棒。下次我要处理低级电报的时候,我一定要试试看!