是否可以从Android服务运行getevent并获得类似于运行adb时所看到的输出,以便从开发计算机上的命令提示符调用getevent?当我尝试类似的东西时:
ProcessBuilder builder = new ProcessBuilder()
.command("getevent")
.redirectErrorStream(true)
.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(builder.getInputStream()));
...
我为每个设备获得的输出如下:
无法打开/ dev / input / event [n],权限被拒绝
由于Android的安全保护,是否无法访问此类低级别信息?是否可以在“有根”的设备上使用?
为什么我要这样做: 我想在Android设备上记录用户的操作(触摸和手势事件)以进行可用性测试。可访问性服务似乎是要走的路,但信息不够详细。例如,对于滑动手势,我无法获取用户滑动位置的屏幕坐标。我在想从触摸屏获取低级输入可能会让我获得更详细的信息。也许有更好的方法来做到这一点? (我是Android界的新手。在Windows上这种事情很简单。)
答案 0 :(得分:1)
你可以这样做。
th = new Thread(new Runnable(){
private Process exec;
@Override
public void run() {
try {
exec = Runtime.getRuntime().exec(new String[]{"su","-c","getevent -t " + device});
InputStreamReader is = new InputStreamReader(
exec.getInputStream());
String s;
BufferedReader br = new BufferedReader(is);
while(((s = br.readLine()) != null) && run){
...
}
is.close();
exec.destroy();
} catch (IOException e) {
e.printStackTrace();
}
}
您必须使用' su'获得root权限,但通过这种方式,您无法获得实时事件,因为缓冲区大小为4k ,您只有在包含4k数据后才能获取数据。
答案 1 :(得分:0)
搜索UIAutomator。这就是你想要做的。
答案 2 :(得分:0)
您的手机必须 rooted 才能执行getevent / sendevent命令。
一种方法是从游戏商店安装任何终端模拟器,如Qute: Command Console & Terminal Emulator。
在终端输入以下内容:
1)su
(它将获得getevent
所需的root访问权限)
2)getevent
(或getevent -c 8
仅输出8行,否则会淹没终端)