无法通过android代码执行sendevent shell命令

时间:2011-08-10 13:33:11

标签: android

我尝试使用以下代码片段来执行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

2 个答案:

答案 0 :(得分:1)

  

但它没有显示任何结果。

这是一件好事。

  

但是,如果我将同一批命令提供给shell提示符,则可以成功单击所提到的坐标。

shell以root级别权限运行。您的SDK应用程序不会,除非您根设备并安排以这种方式执行代码。

请记住,并非所有设备都具有/system/bin/sendevent命令,并且可以随时将其删除。这不是Android SDK的一部分。

  

我必须尝试其他方法才能通过代码在某些坐标上获得点击事件。

出于明显的安全原因,这对于普通设备的Android SDK来说是不可能的。

答案 1 :(得分:0)

这里有answer。您需要使用getevent查找触摸事件ID。 Sendevent使用十进制空间,getevent使用十六进制。此代码来自第一个“答案”,适用于7.0。

相关问题