2013-04-17 11 views
0

J'ai une application qui compte le km parcouru. mais quand je conduis avec ma voiture dans les premiers 1 ou 2 km. tout va bien et après que mon application soit lente.Par exemple quand je suis voyagé 2km. mon application est 1,93 ou quand je suis voyagé 70 km. mon application est 48km.Android: mesure de distance GPS - pas compté correctement kilomètres

Et j'ai un autre petit problème. Quand j'ai commencé l'application pour la première fois, j'ai une grande valeur (par exemple 5536km.) Et quand j'ai redémarré le programme j'ai une valeur normale de 0.0km.C'est juste quand j'ai commencé le GPS GPS et après cela allumé, je vais retrouver le même problème.

Désolé pour mon mauvais anglais.

Merci d'avance.

public class Gps extends Activity { 

TextView display; 



    double km; 
    double currentLon=0 ; 
    double currentLat=0 ; 
    double lastLon = 0; 
    double lastLat = 0; 
    double distance; 
    double distanceMeters; 
    double distanceKm; 
    double distanceKm1; 


    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gps); 



    display = (TextView) findViewById(R.id.info);  




       LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE); 
       lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist); 
       Location loc = lm.getLastKnownLocation(lm.GPS_PROVIDER); 

       display.setText("GPS not found"); 


       if(loc==null){ 
        display.setText("GPS not found"); 
        } 
        else{ 
         //Get the last latitude and longitude 
         lastLon=loc.getLongitude(); 
         lastLat=loc.getLatitude(); 
         } 




    } 



LocationListener Loclist = new LocationListener(){ 




@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

    //start location manager 
    LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE); 


    //Get last location 
     location = lm.getLastKnownLocation(lm.GPS_PROVIDER); 




    //Request new location 
    lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist); 





     //get the current lat and long 
    currentLat = location.getLatitude(); 
    currentLon = location.getLongitude(); 



Location locationA = new Location("point A"); 
    locationA.setLatitude(lastLat); 
    locationA.setLongitude(lastLon); 


Location locationB = new Location("point B"); 
     locationB.setLatitude(currentLat); 
     locationB.setLongitude(currentLon); 


     distanceMeters = locationA.distanceTo(locationB); 

     distanceKm = distanceMeters/1000f; 



     display.setText(String.format("traveled km.\n%.2f km.",distanceKm)); 


    } 



@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 



@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 



} 



@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 



} 






}; 



} 

Répondre

1

Je peux répondre à votre deuxième question: (. Par exemple 5536 km)

Quand j'ai commencé première fois l'application, je reçois grande valeur

C'est la distance de (0,0) (aequator) à votre position actuelle.
Il semble que lastLon et lastLat aient la valeur initiale de 0. Vous devez donc éviter que lastLon et lastLat ne soient invalides. Vérifiez explicitement pour ne pas initialiser.

Questions connexes