2013-03-15 60 views
0

我正在寫一個簡單的應用程序,需要設置當前的GPS座標從我們說的A點,然後前往另一個B點,並讓它檢測到B點的座標。我能夠獲得點A座標沒問題。我只是沒有得到它在B點檢測座標,它讀取與A點座標相同的座標。我已將應用程序安裝在我的手機上,並且我在點之間駕駛一英里。我的清單文件包含所有可能的位置許可。GPS位置不被改變android

以下是活動代碼。

public class GPSTrackingActivity extends Activity { 

Button btnShowLocation; 
Button btnShowEndLocation; 

// GPSTracker class 
GPSTracker gps; 

TextView tvIntialLocation; 
TextView tvEndLocation; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myDBHelper = new DataBaseHelper(GPSTrackingActivity.this); 
    tvIntialLocation = (TextView)findViewById(R.id.tvIntialLocation); 
    tvEndLocation = (TextView)findViewById(R.id.tvEndLocation); 

    // create class object 
    gps = new GPSTracker(GPSTrackingActivity.this);  


    btnShowLocation = (Button) findViewById(R.id.btnShowLocation); 
    btnShowEndLocation = (Button)findViewById(R.id.btnEndLocation); 

    // show location button click event 
    btnShowLocation.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      // check if GPS enabled 
      if(gps.canGetLocation()){ 

       double latitude = gps.getLatitude(); 
       double longitude = gps.getLongitude(); 
       tvIntialLocation.setText("Start Location is - \nLat: " + latitude + "\nLong: " + longitude); 

       }else{ 
       // can't get location 
       // GPS or Network is not enabled 
       // Ask user to enable GPS/network in settings 
       gps.showSettingsAlert(); 
      } 

     } 
    }); 

// show location button click event 
    btnShowEndLocation.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      // check if GPS enabled 
      if(gps.canGetLocation()){ 

       double latitude = gps.getLatitude(); 
       double longitude = gps.getLongitude(); 
       tvEndLocation.setText("End Location is - \nLat: " + latitude + "\nLong: " + longitude); 

      }else{ 
       // can't get location 
       // GPS or Network is not enabled 
       // Ask user to enable GPS/network in settings 
       gps.showSettingsAlert(); 
      } 

     } 
    }); 

} 

}

這裏是類建立GPS追蹤器類。我不確定onLocationChanged是否被調用,當駕駛時位置發生變化時,我沒有看到任何Toast消息。

public class GPSTracker extends Service implements LocationListener { 

private final Context mContext; 

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

// flag for GPS status 
boolean canGetLocation = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

public GPSTracker(Context context) { 
    this.mContext = context; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 

     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 
      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 

        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 


/** 
* Function to get latitude 
* */ 
public double getLatitude(){ 
    if(location != null){ 
     latitude = location.getLatitude(); 
    } 

    // return latitude 
    return latitude; 
} 

/** 
* Function to get longitude 
* */ 
public double getLongitude(){ 
    if(location != null){ 
     longitude = location.getLongitude(); 
    } 

    // return longitude 
    return longitude; 
} 

/** 
* Function to check GPS/wifi enabled 
* @return boolean 
* */ 
public boolean canGetLocation() { 
    return this.canGetLocation; 
} 


@Override 
public void onLocationChanged(Location location) { 
    location = getLocation(); 
    // Testing onLocationChanged: 
    String hej1 = Double.toString(location.getLatitude()); 
    String hej2 = Double.toString(location.getLongitude()); 
    Toast.makeText(this, "Location: "+"Lat: " + hej1 + "Long: " + hej2, 
      Toast.LENGTH_LONG).show(); 
} 

/** 
* Function to show settings alert dialog 
* On pressing Settings button will lauch Settings Options 
* */ 
public void showSettingsAlert(){ 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

    // Setting Dialog Title 
    alertDialog.setTitle("GPS is settings"); 

    // Setting Dialog Message 
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

    // On pressing Settings button 
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog,int which) { 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      mContext.startActivity(intent); 
     } 
    }); 

    // on pressing cancel button 
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
     dialog.cancel(); 
     } 
    }); 

    // Showing Alert Message 
    alertDialog.show(); 
} 

}

爲什麼第二點不更新到當前位置?開始點和結束點顯示爲相同的GPS座標。

回答

0

更改onLocationChanged到下面的代碼

@Override 
    public void onLocationChanged(Location location) { 
     this.location = location; 
     // Testing onLocationChanged: 
     String hej1 = Double.toString(location.getLatitude()); 
     String hej2 = Double.toString(location.getLongitude()); 
     Toast.makeText(this, "Location: "+"Lat: " + hej1 + "Long: " + hej2, 
      Toast.LENGTH_LONG).show(); 
    } 

您應該預先類成員例如位置mLocation;

+0

謝謝,但那不行。 B點的座標仍然不變。 – 2013-03-15 22:53:07

+0

爲onLocationChanged做了任何敬酒表演。如果沒有烤麪包,它永遠不會被調用。 – 2013-03-15 23:06:41

+0

不,Toast永遠不會顯示onLocationChanged永遠不會被調用。 – 2013-03-15 23:10:47