【问题标题】:Injecting touch events注入触摸事件
【发布时间】:2015-08-13 04:07:40
【问题描述】:

我需要在没有 root 的情况下跨应用程序边界注入触摸事件。原因是我有一个外部触摸屏,我想用它来“替换”手机屏幕。将触摸屏视为手机屏幕的更大版本。我已经在投射屏幕,并编写了一个服务来捕获外部屏幕上的触摸事件。现在我想将它们发送到手机,就好像它们是从手机发送的一样。 该解决方案不需要电脑(因为触摸屏需要通过 USB OTG 连接) 有 FRep、VNC(非 root)和 AutoInput,它们似乎都至少在没有 root 的情况下跨应用程序边界执行一些触摸事件。 由于其他原因,我必须使用 Jelly Bean 或更高版本,所以 UiAutomation 可能是我最好的解决方案。

我看到了这个回复 (How to inject click event with Android UiAutomation.injectInputEvent) 看起来它可能正是我所需要的,只是我无法让它工作。它只是在automation.injectInputEvent(motionDown,true)上崩溃;

【问题讨论】:

    标签: android touch ui-automation multi-touch


    【解决方案1】:

    所以 UiAutomation 可能是我最好的解决方案

    仅当您的外部触摸屏实际上是运行 Windows、OS X 或 Linux 并安装了 Android SDK 的计算机时。

    有FRep

    这需要一台运行 Windows、OS X 或 Linux 的计算机,因为它使用了一些 Android SDK。

    VNC(非根)

    这需要一台运行 Windows、OS X 或 Linux 的计算机,因为它使用了一些 Android SDK。

    自动输入

    我认为这是使用辅助功能 API,尽管我不能 100% 确定。

    我看到了这个回复

    这需要一台运行 Windows、OS X 或 Linux 的计算机,因为它“使用 Robotium 和 Android JUnit”,而这又需要 Android SDK。

    如果您希望像普通 Android 应用一样自动输入,您唯一的选择是使用辅助功能 API。

    【讨论】:

    • 我在这里学习,所以请耐心等待。 UiAutomation 的描述声明“通过模拟用户操作与设备的 UI 交互的类......它还允许注入任意原始输入事件来模拟用户与键盘和触摸设备的交互。可以将 UiAutomation 视为一种特殊类型的 AccessibilityService它不为服务生命周期提供挂钩,并公开了其他对 UI 测试自动化有用的 API。”那么我怎么知道需要“一台运行 Win/OSX/Linux 并安装了 Android SDK 的计算机。”?我需要的 API 调用(我认为)在那里
    • @DavidAnderson:“那么我怎么知道需要“一台运行 Win/OSX/Linux 并安装了 Android SDK 的计算机。”? ——来自JavaDocs?你不会的。 Android 的文档有点偶然。 “我需要的 API 调用(我认为)在那里”——是的,只是普通的 Android 应用程序无法使用它。
    • 好的。一直在做一些研究。似乎我可以捕获触摸事件(我已经在捕获外部触摸屏事件),但我不知道如何发送它们。什么 API 用于发送任意触摸事件?发送多点触控事件怎么样?
    • @DavidAnderson:“什么 API 用于发送任意触摸事件?” - 正如我在回答中所写,您唯一的选择是使用可访问性 API。 AFAIK,它们不支持任意触摸事件。 “发送多点触控事件怎么样?” -- 同上。
    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 2019-10-09
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多