我正在尝试使用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等待,例如10ms,以便加速值更新?
此外,如果有更准确/有效的方法来计算使用原始加速度数据的步骤,请告诉我们!
答案 0 :(得分:1)
您可以将状态存储在int中并跟踪您所在步骤的哪个部分(在= 1之前,在= 2期间,在= 3之后)。然后你可以做类似
的事情onSensorChanged(){
if(state == 1){
if(duringStep(accel)){
state = 2;
...
return;
}
}
else if(state == 2){
...
}
}
答案 1 :(得分:0)
有很多方法可以让您等待申请,例如使用wait/notify
,see example或Semaphore
看到这个Pedometer application它正在完成你想要实现的目标