Android 安卓:防止手机震动功能影响加速计数据

Android 安卓:防止手机震动功能影响加速计数据,android,sensors,vibration,Android,Sensors,Vibration,我设计了一个应用程序,它可以跟踪我移动时的加速度,并根据我可能达到的不同阈值来振动手机。我面临的一个问题是,这种振动会直接破坏加速度计的数据 答案建议使用低通滤波器,但我认为这在这个应用程序中不起作用(我需要相对快速的响应时间,振动会导致数据中出现大峰值) 我目前使用的解决方案是在手机振动之前将标志设置为true,调用postDelayed函数,该函数将在一定时间后(1秒钟内)将其设置为false,在onSensorChanged函数中,如果标志为true,只需返回即可 换言之: isPhone

我设计了一个应用程序,它可以跟踪我移动时的加速度,并根据我可能达到的不同阈值来振动手机。我面临的一个问题是,这种振动会直接破坏加速度计的数据

答案建议使用低通滤波器,但我认为这在这个应用程序中不起作用(我需要相对快速的响应时间,振动会导致数据中出现大峰值)

我目前使用的解决方案是在手机振动之前将标志设置为true,调用
postDelayed
函数,该函数将在一定时间后(1秒钟内)将其设置为false,在
onSensorChanged
函数中,如果标志为true,只需返回即可

换言之:

isPhoneVibrating = true; // Start to vibrate     
phoneVibrator.vibrate(VibratePattern, -1);
mHandler.postDelayed(vibrateSensorOff, 1000); // 1 seconds wait before making false
振动传感器关闭
仅包含

isPhoneVibrating = false;
正如我所说,如果标志
isPhoneVibrating
为true,则在
onSensorChanged
函数中返回


我不喜欢这个解决方案,因为我需要在这个应用的不同状态下管理这个额外的标志。是否有其他可能的解决方案不需要额外的标志?

您可以有两个单件来跟踪手机是否振动,并管理
可控震源
加速计

加速计
管理器应公开用于
加速计
的方法,如果
可控震源
未运行,则应传递所有事件(这就像加速计数据的过滤器)。您应该在
加速计管理器上设置手机是否振动的内部标志以及设置方法

可控震源
管理器应公开用于
可控震源
的方法,并应在手机开始振动时更新
加速计
管理器的标志

这些基本上是应用程序中
可控震源
加速计
实例的包装,但是它们应该允许您使用
加速计
,而不必担心应用程序中到处都有
可控震源
标志(只有manager对象应该注意该标志)


我知道这个解决方案确实需要一个额外的标志,但它允许您在两个位置(在两个单例中)管理该标志,并且您不必在整个应用程序中跟踪它。如果您确实实现了这两个单例,请确保不要直接使用
可控震源
加速计
(因为这样做您必须跟踪振动标志)。

谢谢您的回答。今晚我要试试这个。似乎我会做一些类似于我已经做过的事情(即设置标志,然后在不久后取消设置),但其好处是将该操作隐藏在单例中。