我尝试使用以下代码片段来执行sendevent的批处理命令,以单击模拟器上的坐标44,129。但它没有显示任何结果。但是,如果我将同一批命令提供给shell提示符,则可以成功单击提到的坐标。
String [] cmmandemulatorarr = {“/ system / bin / sendevent / dev / input / event0 3 0 44”, “/ system / bin / sendevent / dev / input / event0 3 1 129”, “/ system / bin / sendevent / dev / input / event0 1 330 1”, “/ system / bin / sendevent / dev / input / event0 0 0 0”, “/ system / bin / sendevent / dev / input / event0 1 330 0”, “/ system / bin / sendevent / dev / input / event0 0 0 0”,};
for (int i = 0; i < cmmandemulatorarr.length; i++) {
Process process =
Runtime.getRuntime().exec(cmmandemulatorarr[i]);
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
这里是否有我遗漏的东西,或者我必须尝试别的东西才能在代码的某个坐标上获得点击事件。
注意::执行代码时,我在日志中没有得到任何异常,这似乎成功执行了命令。
此致 PINU
答案 0 :(得分:1)
但它没有显示任何结果。
这是一件好事。
但是,如果我将同一批命令提供给shell提示符,则可以成功单击所提到的坐标。
shell以root级别权限运行。您的SDK应用程序不会,除非您根设备并安排以这种方式执行代码。
请记住,并非所有设备都具有/system/bin/sendevent
命令,并且可以随时将其删除。这不是Android SDK的一部分。
我必须尝试其他方法才能通过代码在某些坐标上获得点击事件。
出于明显的安全原因,这对于普通设备的Android SDK来说是不可能的。
答案 1 :(得分:0)
这里有answer。您需要使用getevent查找触摸事件ID。 Sendevent使用十进制空间,getevent使用十六进制。此代码来自第一个“答案”,适用于7.0。