2013-02-16 3 views
0

Я пытаюсь сделать приложение шагомера с Android, используя только акселерометр для сбора данных. Я собрал много сырых данных с телефона и обнаружил, что определенные шаблоны составляли шаг от моей походки и создали 3 булеана для моделирования того, как один шаг будет похож на акселерометр.Как заставить приложение для Android ждать?

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 мс, между каждой логической проверкой, чтобы обновить значение ускорения?

Кроме того, если есть более точный/эффективный способ выполнения шагов подсчета с использованием необработанных данных ускорения, пожалуйста, дайте мне знать!

ответ

1

Вы можете сохранить состояние в int и отслеживать, на какой части шага вы находитесь (до = 1, во время = 2, после = 3). Тогда вы могли бы сделать что-то вроде

onSensorChanged(){ 
    if(state == 1){ 
    if(duringStep(accel)){ 
     state = 2; 
     ... 
     return; 
    } 
    } 
    else if(state == 2){ 
    ... 
    } 
} 
+0

Вау, просто попробовал это, и он работает очень хорошо! Считал 14 шагов, когда я взял 15. Мне просто нужно немного изменить свои пороговые значения, спасибо за помощь! – user1781027

0

Есть много способов, чтобы сделать вас ждать приложений, например, с помощью wait/notify, see example или Semaphore

Смотрите эту Pedometer application он делает именно то, что вы пытаетесь достичь

Смежные вопросы