问题
I am using GPS services to derive latitude & longitude in my App. I am able to get the latitude and longitude when the signal is avialable. Once i get a fix, if i have to go to a place where the GPS is not able to get a location fix, it still shows the last location. I want to get the current location and not otherwise. I have tried using onLocationChanged() and onGpsStatusChanged() both to get the GPS status but it isnt giving me the result.
@Override
public void onGpsStatusChanged(int arg0) {
// TODO Auto-generated method stub
if (event == GpsStatus.GPS_EVENT_STARTED) {
Log.d("zmenaGPS" , "GPS event started ");
GpsStatus gs = mlocManager.getGpsStatus(null);
Toast.makeText(getApplicationContext(),String.valueOf(gs),Toast.LENGTH_LONG).show();
} else if (event == GpsStatus.GPS_EVENT_STOPPED) {
Log.d("zmenaGPS" , "GPS event stopped ");
GpsStatus gs = mlocManager.getGpsStatus(null);
Log.d("zmenaGPSgps status" , String.valueOf(gs));
Toast.makeText(getApplicationContext(),String.valueOf(gs),Toast.LENGTH_LONG).show();
} else if (event == GpsStatus.GPS_EVENT_FIRST_FIX) {
Log.d("zmenaGPS" , "GPS fixace ");
Toast.makeText(getApplicationContext(),"First Fix",Toast.LENGTH_LONG).show();
} else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
Log.d("zmenaGPS" , "GPS EVET NECO ");
}
}
回答1:
Use NETWORK_PROVIDER instead to get updated location all time. like this..
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(Context.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;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
// 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, 0, 0, locationListenerGps);
// 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();
}
}
}
}
}
// if (!isGPSEnabled) {
// showSettingsAlert();
// }
} catch (Exception e){
e.printStackTrace();
}
return location;
}
Hope this helps
回答2:
It sounds like you want to get the current location, and you want to know when a current location is unknown, so you do not try to use an old location. In that case, you can try to get the current location, and then test if it is old or not.
long fresh=60000; // 1 minute in milliseconds
if(System.currentTimeMillis()-location.getTime()>fresh)
// Do something useful with location
回答3:
If you could not get the location using GPS, you may need to get the location using NETWORK PROVIDER
and compare with you last location fix to know which one is better and use accordingly.
来源:https://stackoverflow.com/questions/16393428/get-gps-status-on-location-changed