Android - 如何记录加速度计在很长一段时间内超过+低于阈值的时间量
Posted
技术标签:
【中文标题】Android - 如何记录加速度计在很长一段时间内超过+低于阈值的时间量【英文标题】:Android - How to record amount of time that accelerometer is over+below a threshold over a long period 【发布时间】:2011-03-01 15:36:07 【问题描述】:在我的应用程序中,我想计算加速度计超过某个阈值的时间,但我不确定如何执行此操作。
我的加速度计的灵敏度设置为'SensorManager.SENSOR_DELAY_GAME'
,因此onSensorChanged()
方法每秒调用大约 20 次。
我有一个名为movementFlag
的标志,当加速度计速度超过阈值时我将其设置为真,当它低于阈值时设置回假。
所以说在一个小时的时间里,我想计算movementFlag
设置为true的总时间,每次设置时都会增加这个时间值,设置为false时也是如此.
我想也许我可以有 2 个值 - moveStart
和 moveFinish
- 在 motionFlag 从 true 转换为 false 时我可以设置为 System.currentTimeMillis()
,反之亦然。将这些值相互减去会给我每次设置标志的时间。
但我不知道如何仅在标志转换时执行此操作,而不是在设置标志时始终执行此操作。
谁能告诉我如何做这个或其他方法来做我想做的事情?谢谢
【问题讨论】:
取决于你想用这个做什么:请记住,有些手机会在屏幕关闭时关闭加速度计(例如摩托罗拉里程碑)所以测量动作可能在很长一段时间内都不起作用(仅当屏幕打开时)。 @Select0r - 是的,我知道,部分唤醒锁应该可以解决这个问题,但我尝试过并没有这样做,而且这个 Google 错误页面显示 [link](code.google.com/p/android/issues/detail?id=3708) 所以目前我正在解决屏幕锁定变暗、电池耗电但无能为力的问题。 【参考方案1】:您需要存储两个值以了解何时发生转换,一个存储您的 moveFlag 的最后一个值(我们称之为 lastV),另一个存储该值之前的值(prevV)。那么:
-
在每个传感器更改事件上执行:prevV = lastV; lastV = 运动标志
如果 prevV!=lastV,那么我们就有了变化!!
如果 LastV==true,则表示运动开始 - 记住开始时间 (moveStart)
如果为假,则运动结束-记住结束时间(moveFinish)并减去
这样,您可以只在更改上累积时间。
【讨论】:
我想我知道你用额外的标志去哪里了,但上面的方法似乎不起作用,因为我设置了 prevV = lastV,然后在第 2 步中,检查如果 prevV != lastV。你的意思是检查 prevV != motionFlag 吗? 您在 prevV = lastV 之后错过了 lastV = motionFlag 部分。通过这种方式,我设法在将之前的值与当前值进行比较之前保存它。这应该是肯定的。 糟糕,我差点忘了这一点,你的方法奏效了。干杯!!以上是关于Android - 如何记录加速度计在很长一段时间内超过+低于阈值的时间量的主要内容,如果未能解决你的问题,请参考以下文章