我有一个没有内置 Controller 支持的游戏,带有基于触摸的控件。我想使用游戏 handle 并在 Android 中获得一些动手编程经验。
我想知道我是否可以让我的应用程序监听 Controller 事件,并将它们转发到我的游戏。
我学会了如何 process controller events .然后我发现由于安全原因我无法转发它们——现在允许以编程方式发送触摸事件是有充分理由的。
根据this blog (its SSL cert expired) ,有三种方式注入(inject)触摸事件:
我发现的其他方法包括构建您自己的平台,因此您可以将您的应用程序设置为系统应用程序并使用平台证书对其进行签名,以提供所需的权限。
或者在您自己的应用程序中包装另一个应用程序,但使用 Instrumentation 在那里发送触摸事件仍然需要 root。
我还阅读了有关 Accessibility API 的信息,但看起来它被认为是对 API 的滥用,并且将来可能是不可能的。
我宁愿不root我的设备,因为如果检测到root,许多游戏都会出现问题。
我正要放弃,但后来我发现了这样的应用程序:
尽管 Android 具有安全性,但选项 2 似乎无论如何都能做到。它是如何做到的?
编辑:我下载了 Octopus 的 APK 并查看了里面。它包括一个名为 libinject.so... 的文件,这就是它发挥作用的地方。我现在有一个新的研究方向,但如果有人有与此相关的资源的链接,我将不胜感激。
最佳答案
如何处理 Controller 操作 [ALSO API 16+]
在系统级别,Android 将来自游戏 Controller 的输入事件代码报告为 Android 键代码和轴值。在您的游戏中,您可以接收这些代码和值并将它们转换为特定的游戏内操作。
当玩家将游戏 Controller 物理连接或无线配对到他们的 Android 设备时,系统会自动将 Controller 检测为输入设备并开始报告其输入事件。您的游戏可以通过在您的 Activity Activity
中实现以下回调方法来接收这些输入事件或专注 View
(您应该为 Activity
或 View
实现回调,但不能同时实现)。
更多详细信息,您可以在此 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/