android - 将 Touch 事件注入(inject) Android 上的另一个应用程序

标签 android touch

我有一个没有内置 Controller 支持的游戏,带有基于触摸的控件。我想使用游戏 handle 并在 Android 中获得一些动手编程经验。

我想知道我是否可以让我的应用程序监听 Controller 事件,并将它们转发到我的游戏。

我学会了如何 process controller events .然后我发现由于安全原因我无法转发它们——现在允许以编程方式发送触摸事件是有充分理由的。

根据this blog (its SSL cert expired) ,有三种方式注入(inject)触摸事件:

  • 使用内部 API(容易更改,需要 root 发送到另一个应用程序)
  • 使用公共(public) API,Instrumentation(需要 root 才能发送到另一个应用程序)
  • 直接写入/dev/input/eventX(需要root才能更改权限)

  • 我发现的其他方法包括构建您自己的平台,因此您可以将您的应用程序设置为系统应用程序并使用平台证书对其进行签名,以提供所需的权限。

    或者在您自己的应用程序中包装另一个应用程序,但使用 Instrumentation 在那里发送触摸事件仍然需要 root。

    我还阅读了有关 Accessibility API 的信息,但看起来它被认为是对 API 的滥用,并且将来可能是不可能的。

    我宁愿不root我的设备,因为如果检测到root,许多游戏都会出现问题。

    我正要放弃,但后来我发现了这样的应用程序:
  • Touch4Gamepad - 这个使用了称为 Arduino Board 的硬件。 Demo of Touch4Gamepad
  • Octopus - 这似乎是我想尝试的方法,但它有相当两极分化的评论。它也不适用于 Google Play 服务。 Demo of Octopus
  • DRO-CON - 这个似乎采用了完全不同的方法,通过连接的 PC 进行。
  • TeamViewer - 它似乎能够远程控制Android,包括发送触摸事件。据此this thread ,TeamViewer 与手机制造商达成协议(protocol)以获得所需的权限。 Supported Manufacturers for Remote Control

  • 尽管 Android 具有安全性,但选项 2 似乎无论如何都能做到。它是如何做到的?

    编辑:我下载了 Octopus 的 APK 并查看了里面。它包括一个名为 libinject.so... 的文件,这就是它发挥作用的地方。我现在有一个新的研究方向,但如果有人有与此相关的资源的链接,我将不胜感激。

    最佳答案

    如何处理 Controller 操作 [ALSO API 16+]
    在系统级别,Android 将来自游戏 Controller 的输入事件代码报告为 Android 键代码和轴值。在您的游戏中,您可以接收这些代码和值并将它们转换为特定的游戏内操作。
    当玩家将游戏 Controller 物理连接或无线配对到他们的 Android 设备时,系统会自动将 Controller 检测为输入设备并开始报告其输入事件。您的游戏可以通过在您的 Activity Activity 中实现以下回调方法来接收这些输入事件或专注 View (您应该为 ActivityView 实现回调,但不能同时实现)。
    更多详细信息,您可以在此 documentation 中找到.

    支持跨 Android 版本的 Controller [API 12+]
    如果您在游戏中支持游戏 Controller ,则您有责任确保您的游戏在运行不同 Android 版本的设备上一致地响应 Controller 。这可以让您的游戏接触到更广泛的受众,并且您的玩家即使在切换或升级其 Android 设备时也可以使用他们的 Controller 享受无缝的游戏体验。
    更多详细信息,您可以在此 documentation 中找到.

    单点触控事件
    对于您想要控制的单点触摸事件,您可以使用 AccessibilityService结合 dispatchGesture .但我认为这不是你真正想要的。您不想处理 Touch本身,而是 Controller 使用的参数。这就是为什么我添加了上面的 2 段,以实现你想要的。

    我添加此答案的原因
    我知道这有点晚了,但直到现在还有可以接受的答案。在达到更高的 API 级别方面,知道如何处理这些东西会很有用。干杯:)

    关于android - 将 Touch 事件注入(inject) Android 上的另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52509109/

    相关文章:

    android - AudioRecord 和 AudioTrack 延迟

    javascript - 如何识别鼠标悬停事件对象是否来自触摸屏触摸?

    android - 当我调用 popBackStack(TAG, POP_BACK_STACK_INCLUSIVE) 和具有共享元素的 fragment 时出现 NullPointerException

    java - 在 Android 4.4.2 上更改短信应用默认设置

    html - 触摸屏设备支持 onmousedown 和 onmouseup 吗?

    ios - 当我在 iPad 屏幕上触摸时如何获取 PDF 注释

    Android MotionEvent.ACTION_MASK

    c++ - 每次用户触摸屏幕时如何在 Qml 中执行操作?

    android - 查询解析用户

    android - 如何仅从 Android Studio 中的特定对话中获取已发送的消息?