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 个值 - moveStartmoveFinish - 在 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 - 如何记录加速度计在很长一段时间内超过+低于阈值的时间量的主要内容,如果未能解决你的问题,请参考以下文章

创建一个精确的时间间隔,在很长一段时间内没有漂移

MCP9600:热电偶读数()在很长一段时间内给出相同的值

程序猿的产品思考:2C与2B产品思维的区别

用PHP去实现数据库查询结果缓存

继续在Android上使用旧的Google云端硬盘API

Matplotlib正在构建字体缓存很长一段时间?