Android Java время разработки ускорения до - PullRequest
0 голосов
/ 28 сентября 2011

Как рассчитать время разгона до 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 Ответ

0 голосов
/ 28 сентября 2011

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

...