如何创建一个 Android 应用程序,当用户正在玩另一个应用程序时,可以捕获全局触摸屏事件?

2024-01-08

正如标题所说,在我的研究中,我需要记录用户触摸屏事件,主要是用户使用另一个应用程序时的手势(例如点击、滚动、滑动等)。目前我想不出一个好的方法。 Android 4.x 好像无法读取触摸屏事件?有人知道捕获触摸事件的好方法吗?


我还花了相当长的时间进行研发,以在 ANDROID 应用程序中获取全局触摸事件。

实际上我们的要求是从 ANDROID 应用程序内部捕获手机上的触摸坐标。

我们尝试了几种方法:

1-首先我们尝试放置一个透明布局(就像手机屏幕上方的一层玻璃)覆盖手机屏幕,然后接收触摸事件并动态移除玻璃,以便事件可以传递到玻璃下方,然后再次动态插入玻璃。 但缺点是它需要两次点击,这是不可行的(因为第一次点击将给出触摸坐标,第二次触摸将通过玻璃下方)。

2-然后我们尝试在窗口管理器中使用一个特殊标志,即 flag_watch_outside_touch,方法是将透明布局大小设置为 1 X 1,但我们得到的触摸坐标为 (0,0),因为 Android 框架强制规定任何其他进程都无法在内部获取触摸点其他过程。

3-然后我们尝试通过代码运行命令“adb shell getevents”,但它不接受触摸事件(尽管通过使用“adb shell sendevent”我们能够发送全局触摸事件,即通过传递坐标我们能够传递设备屏幕上特定坐标上的事件。

4-现在我们非常确定,如果没有 root,任何应用程序都无法获取将在其他应用程序进程上发生的全局触摸事件。 Android 安全系统不允许这样做,否则任何应用程序都可以获取密码或其他用户输入数据。

但是......我们必须这样做(没有生根)......

5-现在我们尝试使用 shell 脚本并从命令提示符执行 getevent 命令并将触摸事件重定向到文件并解析触摸事件以获得可读坐标..

因此,我们无法通过代码捕获应用程序内的全局触摸事件,但是我们可以通过从 adb shell 执行 getevent 命令来从操作系统级别捕获。 我们可以通过将其存储到手机存储内的外部存储来传递到 Android 应用程序。

希望这会对大家有所帮助。

Thanks,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建一个 Android 应用程序,当用户正在玩另一个应用程序时,可以捕获全局触摸屏事件? 的相关文章

随机推荐