在我onReceive(Content context, Intent intent)
的{{1}}方法内部,我需要计算耳机按钮点击次数(单次,双次,三次),由public class MediaButtonIntentReceiver extends BroadcastReceiver
表示KeyEvent.ACTION_DOWN
1}}。
我几乎可以工作,但我现在的算法很糟糕,几次后不可靠。基本上每个连续的ACTION_MEDIA_BUTTON
(在前一个ACTION_DOWN
的某个毫秒内命中)我会ACTION_DOWN
。但是我也需要看看用户何时完成按下,所以在每次事件之后我都会启动numClicks++
,如果它用完了就没有新的点击,那么我已经完成了,现在知道了这个数字点击次数
我遇到的问题如下:首先,按钮本身看起来很嘈杂 - 如果我按得太快,我通常会错过一次点击。二,经过一些试验,当它加载的应用程序,它开始随机,我假设有多个CountDownTimer
线程(是正确的词?)仍在运行,这使我的东西搞砸了。
无论如何这里是主要的代码片段:
//注意:CountDownTimer
使用thisClickTime
System.currentTimeMillis()
作为参考,我一直在寻找类似的东西:
查看是否有一种注册点击次数的好方法。我不太了解他们的代码,从我看到他们只处理单击/双击(我可能需要三倍和四倍)。
编辑 - 上传了我正在使用的当前代码。它在大多数时候都非常适合。这就是我注意到的事情:如果我的按钮测试时间过于接近,结果会开始搞砸并计算点击次数。我认为这是因为之前尝试的其他CountDownTimers仍然打开,当它们完成时,它们会重置某些状态变量(numClicks = 0,一个)。我在滥用计时器吗?我想不出另一个解决方案,因为我需要在最后一次点击后确定点击完成时间的经过时间的概念。
感谢您的帮助。
答案 0 :(得分:1)
如果您的BroadcastReceiver
已在清单中注册,则BroadcastReceiver
仅对onReceive()
的一次调用存在 - 后续广播可能会导致另一个BroadcastReceiver
实例。并且清单注册的BroadcastReceiver
无法分叉线程,因为整个过程可能会在onReceive()
结束后关闭。
我怀疑是否有一种简洁的方法可以使您的代码可靠,因为媒体按钮并非专为您的预期用途模式而设计。