Основная проблема, которую я вижу здесь, состоит в том, что всякий раз, когда устройство перемещается, startAccelerationToTime
сбрасывается. (Первая if
только проверяет наличие движения; она не проверяет, записано ли уже время начала.
Я вообще не вижу, где нужен isAccelerationLoggingStarted
- скорость и сами переменные можно немного очистить, чтобы понять, каким должен быть следующий шаг.
Ваш псевдокод, вероятно, должен выглядеть примерно так:
if speed is 0
clear start time
else if no start time yet
start time = current time
clear acceleration time
else if no acceleration time yet, and if speed >= 100 mph
acceleration time = current time - start time
На Java это выглядело бы как ...
long startTime = 0;
double accelerationTime = 0.0;
@Override
public void onLocationChanged(Location currentLoc) {
// when stopped (or so slow we might as well be), reset start time
if (!currentLoc.hasSpeed() || currentLoc.getSpeed() < 0.005) {
startTime = 0;
}
// We're moving, but is there a start time yet?
// if not, set it and clear the acceleration time
else if (startTime == 0) {
startTime = currentLoc.getTime();
accelerationTime = 0.0;
}
// There's a start time, but are we going over 100 km/h?
// if so, and we don't have an acceleration time yet, set it
else if (accelerationTime == 0.0 && currentLoc.getSpeed() >= 27.77) {
accelerationTime = (double)(currentLoc.getTime() - startTime) / 1000.0;
}
}
Теперь я не уверен, как именно работают слушатели местоположения или как часто они уведомляют вас, когда вы переезжаете. Так что это может быть только полуработой. В частности, onLocationChanged
может не вызываться, когда вы не двигаетесь; вам может потребоваться запросить обновление (возможно, через кнопку «сброс» или что-то в этом роде) или установить определенные параметры, чтобы вызвать то, что происходит, когда скорость == 0.