【问题标题】:How to improve speed of input command in android?如何提高android中输入命令的速度?
【发布时间】:2019-09-16 21:56:53
【问题描述】:

我正在开展一个项目,旨在帮助残疾人更好地使用他们的安卓设备(主要用于教育目的)。我们想出了一些关于替代输入设备的想法,并使用输入命令在屏幕上重播。目前,我们必须root手机并使用输入命令

input tab x y

但是执行单个选项卡大约需要 3 秒,这太慢了。 在深入研究文档后,我遇到了sendevent.c,我意识到它为每个命令打开和关闭接口文件。无论如何我可以将输入直接写入该文件,这可能会改善每个选项卡的延迟?

是否有任何替代方法来重放输入?我知道 appstore 上的许多应用程序也可以在没有 root 的情况下非常快速地执行选项卡。

非常感谢

编辑:这是我正在使用的代码块:

int i = 0;
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        while (true){
            try {
                Process process = null;
                process = Runtime.getRuntime().exec("su", null, null);
                DataOutputStream os = new DataOutputStream(process.getOutputStream());
                String cmd = "/system/bin/input tap " + 273 + " " + (232+90) + "\n"; //760 116
                os.writeBytes(cmd);
                os.writeBytes("exit\n");
                os.flush();
                os.close();
                process.waitFor();
            } catch(Exception e) {
                Log.i("CommandSU", e.toString());
                i--;
            }
            i++;
            if (i >= 1){
                break;
            }
        }

【问题讨论】:

    标签: java android command


    【解决方案1】:

    所以我实际上是为一些键盘这样做的。我们所做的是将事件记录在日志文件中。然后我们编写代码,通过创建一个线程来重放该文件,然后将其读入并在相同的时间以相同的顺序进行直接触摸/键盘/其他事件,直到它需要创建下一个命令。这工作得相当好,但调试很慢。

    然后,我们重写了所有算法,以处理输入中嵌入时间的输入流。然后我们可以伪造出我们想要的任何一组输入。这对调试工作非常快,并成为我们的 goto 方法。

    【讨论】:

    • 嗨!谢谢您的回答。起初我们认为延迟是在我们的备用输入设备中按下的每个键之间,但事实并非如此,原因是因为input tab x y 的工作原理,我看到有人更改了sendevent.c 中的代码,以便它仅在完成重播时关闭流。关于您的项目,我能否详细了解您如何在屏幕上模拟选项卡?
    • 在我们的例子中,我们制作了一个真正的软件键盘,因此我们可以直接访问。你永远不会因为需要调用这样的过程而获得任何真正的速度。如果成为键盘不是一种选择,我会考虑将输入应用程序合并到您的应用程序中,并且只是做输入应用程序所做的事情。否则,您是在谈论每次调用启动一个进程和多个 IPC。
    • 是的,我正在寻找有关此问题的文档,或者一些示例
    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2011-10-20
    • 2012-07-18
    • 1970-01-01
    • 2012-09-27
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多