【问题标题】:Is it possible to call getevent from an Android service?是否可以从 Android 服务调用 getevent?
【发布时间】:2013-03-13 20:11:12
【问题描述】:

是否可以从 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 的安全保护而无法访问这样的低级信息?是否可以在“root”设备上使用?

我为什么要这样做: 我想在 Android 设备上记录用户的操作(触摸和手势事件)以进行可用性测试。无障碍服务似乎是要走的路,但信息不够详细。例如,对于滑动手势,我无法获取用户滑动位置的屏幕坐标。我在想,从触摸屏获取低级输入可能会让我获得更详细的信息。也许有更好的方法来做到这一点? (我是 Android 世界的新手。这种事情在 Windows 上很容易。)

【问题讨论】:

    标签: android android-service android-permissions


    【解决方案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权限,但是这样你无法获取实时事件,因为有a缓冲区大小为4k,包含4k数据后才能获取数据。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        在终端输入以下内容:

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

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

        【讨论】:

          猜你喜欢
          • 2019-01-22
          • 1970-01-01
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-16
          • 1970-01-01
          • 1970-01-01
          • 2023-01-24
          相关资源
          最近更新 更多