2011-09-28 1 views
0

Comment puis-je calculer le temps d'accélération à 100kmh? Eh bien, j'ai enregistré un écouteur d'emplacement lorsque le! Location.hasSpeed ​​() est vrai stocker l'heure de l'emplacement dans une variable. Lorsque la vitesse est portée de la vitesse donnée dans ce cas 100 kmh (27,77 m/s) je soustrais du spped de l'emplacement et le résultat que je divise par 1000.Temps de développement java Android de l'accélération à

est ici le « 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; 
      startAccelerationToTime = (double) currentLoc.getTime(); 
      acceleration100 = 0.0; 
     } 

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

Répondre

0

Le principal problème que je vois ici, est que chaque le périphérique est en mouvement, startAccelerationToTime est réinitialisé. (Le premier if vérifie seulement s'il y a un mouvement, il ne vérifie pas s'il y a déjà une heure de début enregistrée

Je ne vois pas où isAccelerationLoggingStarted est nécessaire - la vitesse, et les variables elles-mêmes, peuvent être . nettoyé un peu pour préciser ce que la prochaine étape devrait être

Votre pseudo doit probablement ressembler à:

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 

En Java, ce serait ressembler à ...

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

Maintenant, je ne sais pas exactement comment fonctionnent les écouteurs de localisation, ou à quelle fréquence ils vous avertissent lorsque vous vous déplacez. Donc, cela peut seulement fonctionner à moitié. En particulier, onLocationChanged peut ne pas être appelé lorsque vous ne bougez pas; vous devrez peut-être demander une mise à jour (peut-être via un bouton "reset" ou quelque chose) ou définir certains paramètres afin de déclencher le truc qui arrive quand speed == 0.

+0

Merci. Mais vient un autre problème. Combien de temps s'écoule entre le début du déplacement et le déplacement du GPS et le déclenchement d'un événement onLocationChange. – Laszlo

+0

Je suppose que cela dépend en partie de l'appareil, et en partie des critères que vous passez à 'requestLocationUpdates'. – cHao

+0

J'ai passé zéro à minTime et minDistance aussi – Laszlo