开发者

Android java development time of acceleration to

开发者 https://www.devze.com 2023-04-09 03:12 出处:网络
How can I calculate the time of acceleration to 100kmh? Well, I registered a location listener when the !location.hasSpeed() is true store the time of location into a variable. When the speed is reach

How can I calculate the time of acceleration to 100kmh? Well, I registered a location listener when the !location.hasSpeed() is true store the time of location into a variable. When the speed is reach of the given speed in this case 100km/h (27.77 m/s) I substract from the spped of location and the result I divide by 1000.

Here is the "pseudo code"

    @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;
            startAccelerationToT开发者_Python百科ime = (double) currentLoc.getTime();
            acceleration100 = 0.0;
        }

        if (isAccelerationLoggingStarted) {
            if (currentLoc.getSpeed() >= 27.77) {
                acceleration100 = (currentLoc.getTime() - startAccelerationToTime) / 1000;
                isAccelerationLoggingStarted = false;
            }
        }
    }


The main problem i see here, is that whenever the device is moving, startAccelerationToTime is reset. (The first if only checks whether there's movement; it doesn't check whether there's already a start time recorded.

I don't see where isAccelerationLoggingStarted is needed at all -- the speed, and the variables themselves, can be cleaned up a bit to make it clear what the next step should be.

Your pseudocode probably ought to look something like:

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

In Java, that'd look like...

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;
    }
}

Now, i'm not sure exactly how location listeners work, or how often they notify you when you're moving. So this may only semi work. In particular, onLocationChanged might not get called when you're not moving; you may need to request an update (perhaps via a "reset" button or something) or set certain params in order to trigger the stuff that happens when speed == 0.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号