Android触摸事件被滤除了?

时间:2011-11-04 23:16:44

标签: android events touch

我编写了一个Android应用程序来捕获所有TouchEvent(例如,DOWN,UP,MOVE ..)并将其转储到日志文件中。

该应用程序可以在真实的人体触摸下正常工作,速度为每秒1次> 5次触摸。然而,当我使用以每秒100-> 500次触摸的速度运行的机械触摸发生器时,日志文件显示的触摸次数少于实际生成的次数。

在查看日志文件中记录的每个触摸事件的时间戳之后,我发现了一个非常奇怪的事件捕获模式。总共有2个连续的事件相隔2毫秒,然后是大约50毫秒后的另一个事件。

例如:    第一个事件发生在第10毫秒

第二个事件发生在第12个毫秒,即第一个

之后的2毫秒

第3次事件发生在62毫秒,即第一次

后50毫秒

第4次事件发生在64毫秒,即第一次

后2毫秒

然后下一个事件发生在第104毫秒......然后是第106个......依此类推

我一直在寻找这个问题而没有运气。但是我发现Android允许双重触摸,但不允许超过2次连续触摸。这意味着你可以连续2次触摸非常接近,但不超过2.我的猜测是屏幕驱动器禁用第3,第4 ......触摸甚至一段时间(很可能是50毫秒),直到它允许下一个事件再次发生。这样做的原因是它假设人类不能触摸得太快,应该禁用这种触摸并将其视为错误/噪音。
请注意,这与多点触控不同,因为我说的是连续事件发生在不同的时间点(即使它们非常接近),速度非常快,而多点触控事件同时发生在多点触控中。

我想问一下是否有人知道为什么会有这样的过滤机制?以及如果可能的话如何禁用它们?我的目标是尝试以尽可能高的速率记录尽可能多的触摸事件。

我真的很感激,如果任何人可以确认/强化我的假设或帮助我绕过Android使用的过滤器。

非常感谢读到这一点:)。

1 个答案:

答案 0 :(得分:0)

我不确定你是否找到了解决方案,但我最近遇到了同样的问题。我得到了打印到Logcat的堆栈跟踪,声明太多线程正在访问同一个日志文件(这是有道理的,因为每次写入文件时,它都会自动在新线程上运行它)。我的解决方案是简单地将所有日志放入几百个字符串的数组中,当数组达到其最大大小时,使用StringBuilder附加所有日志并将它们(一个线程)写入我的文件。这解决了我所有的问题。