[英]Unable using Runtime.exec() to execute shell command “echo” in Android Java code
[英]Unable to execute sendevent shell command through the android code
我嘗試了以下代碼片段來執行 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);
}
這里有什么我遺漏的嗎,或者我必須嘗試其他方法才能通過代碼在某個坐標上獲取點擊事件。
注意::在執行似乎命令已成功執行的代碼時,我在日志中沒有收到任何異常。
問候皮努
但它沒有顯示任何結果。
這是一件好事。
但是,如果我向 shell 提示符發出同一批命令,它能夠成功單擊提到的坐標。
shell 以根級權限運行。 您的 SDK 應用程序不會,除非您根設備並安排以這種方式執行您的代碼。
請記住,並非所有設備都有/system/bin/sendevent
命令,並且可以隨時將其刪除。 這不是 Android SDK 的一部分。
我必須嘗試其他方法才能通過代碼在某個坐標上獲得點擊事件。
出於明顯的安全原因,對於普通設備,Android SDK 是不可能的。
在這里你有答案。 您需要使用 getevent 找到觸摸事件 id。 Sendevent 使用十進制空格,getevent 使用十六進制。 來自第一個“答案”的代碼適用於 7.0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.