Android - 如何记录加速度计在很长一段时间内超过或低于阈值的时间量

发布于 2024-10-19 12:23:12 字数 536 浏览 2 评论 0原文

在我的应用程序中,我想计算加速度计超过特定阈值的时间,但我不确定如何执行此操作。
我的加速度计的灵敏度设置为 'SensorManager.SENSOR_DELAY_GAME',因此 onSensorChanged() 方法每秒被调用大约 20 次。

我有一个名为 movementFlag 的标志,每当加速度计速度超过阈值时,我将其设置为 true,并在低于阈值时设置回 false。

所以说在一小时的时间内,我想计算 movementFlag 设置为 true 的总时间,每次设置时都会增加这个时间值,并且设置时也是如此为假。
我想也许我可以有 2 个值 - moveStartmoveFinish - 我可以在 moveFlag 从真与假,反之亦然。将这些值相减就可以得到每次设置标志的时间。
但我不知道如何在标志转换时执行此操作,而不是在设置标志时始终执行此操作。
谁能告诉我如何执行此操作或其他方法来完成我想做的事情?谢谢

In my app I want to count for how long the accelerometer is over a certain threshold, but i'm unsure of how to do this.
The sensitivity of my accelerometer is set to 'SensorManager.SENSOR_DELAY_GAME' so the onSensorChanged() method is called approximately 20 times a second.

I have a flag called movementFlag that I'm setting to true whenever the accelerometer speed goes over a threshold, and setting back to false when it goes under the threshold.

So say over the space of an hour, I want to count up the total amount of time that the movementFlag is set to true, incrementing this time value each time it's set, and the same for when it's set to false.
I thought maybe I could have 2 values - moveStart and moveFinish - that I could set to System.currentTimeMillis() upon the transition of movementFlag from true to false and vice versa. Subtracting these values from each other would give me the amount of time the flag is set each time.
But I don't know how to do this just on the transition of a flag and not the whole time while a flag is set.
Can anyone tell me how to do this or another method to do what I want to do here? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

揽清风入怀 2024-10-26 12:23:12

您需要存储两个值才能知道转换何时发生,一个值存储 movingFlag 的最后一个值(我们称之为lastV),另一个值存储之前的值(prevV)。然后:

  1. 在每个传感器更改事件上执行:prevV = lastV; lastV = moveFlag
  2. 如果 prevV!=lastV,那么我们有一个改变!
  3. 如果 LastV==true,则表示运动开始 - 记住开始时间 (moveStart)
  4. 如果为 false,则表示运动结束 - 记住结束时间 (moveFinish) 并减去

这样,您可以仅在更改时累积时间。

You need to store two values to know when transition occurs, one which stores last value of your movementFlag (let's call it lastV), and one which stores value before that one (prevV). Then:

  1. On each sensor change event do: prevV = lastV; lastV = movementFlag
  2. If prevV!=lastV, then we have a change!!
  3. If LastV==true, it means start of the movement - remember start time (moveStart)
  4. If it is false, it is the end of the movement - remember end time (moveFinish) and subtract

This way, you may accumulate time on changes only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文