0

走行距離をカウントするアプリが 1 つあります。しかし、最初の 1 ~ 2 km で車を運転しているとき。すべて問題なく、その後アプリが遅くなります。たとえば、2 km 移動したときです。私のアプリは1.93、または70km移動したときです。私のアプリは48kmです。

そして、私には別の小さな問題があります。アプリを初めて起動したときは大きな値 (たとえば 5536km) を取得し、プログラムを再起動すると通常の値 0.0km を取得しました。これは、GPS をオフにしてから初めて GPS を開始したときです。オンにすると、同じ問題が再び発生します。

私の悪い英語でごめんなさい。

前もって感謝します。

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



}






 };



}
4

1 に答える 1

1

2 番目の質問にお答えします。

アプリを初めて起動したとき、大きな価値が得られました(たとえば、5536km。)

これは、(0,0) (赤道) から現在地までの距離です。
lastLon と lastLat の初期値は 0 のようです。そのため、lastLon と lastLat が無効になることは避けなければなりません。初期化されていないことを明示的にチェックします。

于 2013-04-17T15:19:21.577 に答える