0

是否可以从 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上很容易。)

4

3 回答 3

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 数据后才能获取数据。

于 2014-08-10T12:02:21.230 回答
0

搜索 UIAutomator。这会做你想做的事。

于 2013-03-13T20:14:59.767 回答
0

您的手机必须root才能执行 getevent/sendevent 命令。

一种方法是从 Play 商店安装任何终端仿真器,例如 Qute: Command Console & Terminal Emulator

在终端输入以下内容:

1)su(它将获得所需的root访问权限getevent

2) getevent(或getevent -c 8仅输出 8 行,否则会淹没终端)

于 2017-10-05T12:35:24.053 回答