0

我正在尝试使用仅使用加速度计来收集数据的 Android 计步器应用程序。我从手机中收集了大量原始数据,发现某些模式构成了我步态的一步,并创建了 3 个布尔值来模拟一步对加速度计的样子。

public boolean beforeStep(float y)
    {
        if(y > 1.5 && y < 3){
        return true;
    }
        else
        {
        return false;
        }
    }

public boolean duringStep(float y)
{
    if(y > 3 && y < 5){
        return true;
    }
    else
    {
        return false;
    }
}

public boolean afterStep(float y)
{
    if(y > 1.5 && y < 3){
        return true;
    }
    else
    {
        return false;
    }
}

if(beforeStep(accel)){
    if(duringStep(accel)){
        if(afterStep(accel)){
            stepCount++;
        }
    }
}

起初我在 onSensorChanged() 方法中运行了这些布尔值,但我意识到这意味着它会将相同的加速度值传递给所有三个布尔值,因此程序永远不会识别步骤。如何让 Android 在每次布尔检查之间等待 10 毫秒,以便更新加速度值?

此外,如果有更准确/有效的方法来使用原始加速度数据计算步数,请告诉我!

4

2 回答 2

1

您可以将状态存储在 int 中并跟踪您所处的步骤的哪一部分(之前 = 1,期间 = 2,之后 = 3)。然后你可以做类似的事情

onSensorChanged(){   
  if(state == 1){
    if(duringStep(accel)){
      state = 2;
      ...
      return;
    }
  }   
  else if(state == 2){
    ... 
  }
}
于 2013-02-16T22:39:50.897 回答
0

有很多方法可以让您的应用程序等待,例如使用wait/notify,查看示例Semaphore

请参阅此计步器应用程序,它正在做的正是您想要实现的目标

于 2013-02-16T22:40:27.623 回答