Android Java время разработки ускорения до
Как можно рассчитать время разгона до 100км? Ну, я зарегистрировал прослушиватель местоположения, когда! Location.hasSpeed () истинно хранит время местоположения в переменной. Когда скорость достигает заданной скорости, в данном случае 100 км / ч (27,77 м / с), я вычитаю из места падения, а результат делю на 1000.
Вот "псевдокод"
@Override
public void onLocationChanged(Location currentLoc) {
// when stop reseted, when start reset again
if (isAccelerationLoggingStarted) {
if (currentLoc.hasSpeed() && currentLoc.getSpeed() > 0.0) {
// dismiss the time between reset to start to move
startAccelerationToTime = (double) currentLoc.getTime();
}
}
if (!currentLoc.hasSpeed()) {
isAccelerationLoggingStarted = true;
startAccelerationToTime = (double) currentLoc.getTime();
acceleration100 = 0.0;
}
if (isAccelerationLoggingStarted) {
if (currentLoc.getSpeed() >= 27.77) {
acceleration100 = (currentLoc.getTime() - startAccelerationToTime) / 1000;
isAccelerationLoggingStarted = false;
}
}
}
1 ответ
Основная проблема, которую я вижу здесь, состоит в том, что всякий раз, когда устройство движется, 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.