GpsStatus.Listener works only if GPS is on
android, gps, listener
Solution
Well, `LocationListener` has been provided with:
`onProviderDisabled()`,`onProviderEnabled()` and `onStatusChanged()` for exactly this purpose.
`GpsStatus.Listener` delivers info about GPS service's inner workings. It is not to be used for telling the status pf GPS Provider.
`LocationListener` delivers info about providers. The moment you register `LocationListener` with location provider, `onProviderEnabled()`/`onProviderDisabled()` is called accordingly, and your app can always tell when GPS is turned on or off.
Try this:
public class test extends Activity implements LocationListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,10,this);
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
if(LocationManager.GPS_PROVIDER.equals(s)){
Toast.makeText(this,"GPS on",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProviderDisabled(String s) {
if(LocationManager.GPS_PROVIDER.equals(s)){
Toast.makeText(this,"GPS off",Toast.LENGTH_SHORT).show();
}
}
}
Problem
in my App I have a GpsStatus.Listener to receive events when the user enables or disables GPS. Everything works fine if GPS is on before I start the app. In this case I receive a GPS_EVENT_STARTED or a GPS_EVENT_STOPPED everytime I toggle GPS on or off. The problem is if GPS is off while app is starting. In this case I don't receive an event if I toggle GPS on or off. Can someone explain that to me? Here is my code: ``` public class GPSTracker implements android.location.GpsStatus.Listener { private final Context context; private final LocationListener locListener; private LocationManager locationManager; private boolean isGPSEnabled = false; public GPSTracker(Context context, LocationListener locListener) { this.context = context; this.locListener = locListener; setupGPS(); } private void setupGPS() { locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); locationManager.addGpsStatusListener(this); isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if(!isGPSEnabled) { Toast.makeText(getContext(), "GPS disabled", Toast.LENGTH_SHORT).show(); } else { locationManager.removeUpdates(locListener); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, locListener); } } @Override public void onGpsStatusChanged(int event) { Log.e("onGpsStatusChanged", event+""); switch(event) { case GpsStatus.GPS_EVENT_STARTED: Log.e("onGpsStatusChanged", "GPS_EVENT_STARTED"); break; case GpsStatus.GPS_EVENT_STOPPED: Log.e("onGpsStatusChanged", "GPS_EVENT_STOPPED"); break; } } ``` So, my logcat output is (if GPS is on while starting): - GpsStatusChanged(24638): 1 // app starts - GpsStatusChanged(24638): GPS_EVENT_STARTED - GpsStatusChanged(24638): 4 // searching for fixes - GpsStatusChanged(24638): 4 - GpsStatusChanged(24638): 2 // toggle GPS off - GpsStatusChanged(24638): GPS_EVENT_STOPED Output with GPS off: nothing.