У меня есть приложение счетчика шагов, в котором я запускаю службу, которая учитывает сделанные шаги, а затем отправляет широковещательную передачу фрагменту, который затем обновляется на фрагменте. Счетчик шагов работает нормально, но я хочу рассчитать скорость, основанную на шагах. Вот что я сейчас пытаюсь сделать.
Получатель получает количество шагов:
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int steps = intent.getIntExtra(StepCounterService.STEP_INCREMENT_KEY, 0);
if (firstStepTime.equals("0")) {
firstStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY);
} else if (secondStepTime.equals("0")) {
secondStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY);
} else {
firstStepTime = secondStepTime;
secondStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY);
}
updateAllUI(steps);
}
};
Итак, что я делаю, как только я начинаю делать шаги, я вижу, что переменная firstStepTime
пуста. Если это так, я сохраняю время в переменной firstStepTime
. На следующем шаге я вижу, что secondStepTime
пуст, и если это так, я сохраняю это время в переменной secondStepTime
.
Теперь для следующих шагов они обновляются.
public void updateAllUI(int numberOfSteps) {
if (!(firstStepTime.equals("0")) && !(secondStepTime.equals("0"))) {
try {
Calendar c = Calendar.getInstance();
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SSS");
timeDifference = timeFormat.parse(secondStepTime).getTime() - timeFormat.parse(firstStepTime).getTime();
speed = (float) ((0.0254 / (timeDifference * 0.001)) * 3.6);
} catch (Exception e) {
timeDifference = 0;
speed = 0;
}
textview.settext(speed +"Km/h);
}
}
Итак, в этом я просто проверяю, не обе пусты ли я, я принимаю значения и вычисляю разницу во времени. Проблема здесь в том, что иногда она не учитывает скорость должным образом. И большая проблема заключается в том, что пользователь останавливается, скорость остается постоянной и не падает до нуля.
Есть ли лучший способ сделать расчет скорости?