Greg Greg - 7 days ago 7
Android Question

Action for GPS status change

I'm looking for an action for IntentFilter that is provided while GPS status is changed. I have found this

filter.addAction("android.location.GPS_ENABLED_CHANGE");

but it does not works. I am looking the same thing that I have for bluetooth

filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
but for GPS.

Answer

Here is example.

public class Main extends Activity implements LocationListener {

    /* this class implements LocationListener, which listens for both
     * changes in the location of the device and changes in the status
     * of the GPS system.
     * */

    static final String tag = "Main"; // for Log

    LocationManager lm; 
    StringBuilder sb;
    int noOfFixes = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /* the location manager is the most vital part it allows access 
         * to location and GPS status services */
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    }

    @Override
    protected void onResume() {
        /*
         * onResume is is always called after onStart, even if the app hasn't been
         * paused
         * 
         * add location listener and request updates every 1000ms or 10m
         */
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this);
        super.onResume();
    }

    @Override
    protected void onPause() {
        /* GPS, as it turns out, consumes battery like crazy */
        lm.removeUpdates(this);
        super.onPause();
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.v(tag, "Location Changed");

        sb = new StringBuilder(512);

        noOfFixes++;

        /* display some of the data in the TextView */

        sb.append("No. of Fixes: ");
        sb.append(noOfFixes);
        sb.append('\n');
        sb.append('\n');

        sb.append("Londitude: ");
        sb.append(location.getLongitude());
        sb.append('\n');

        sb.append("Latitude: ");
        sb.append(location.getLatitude());
        sb.append('\n');

        sb.append("Altitiude: ");
        sb.append(location.getAltitude());
        sb.append('\n');

        sb.append("Accuracy: ");
        sb.append(location.getAccuracy());
        sb.append('\n');

        sb.append("Timestamp: ");
        sb.append(location.getTime());
        sb.append('\n');
        Log.v(tag, sb.toString());
    }

    @Override
    public void onProviderDisabled(String provider) {
        /* this is called if/when the GPS is disabled in settings */
        Log.v(tag, "Disabled");

        /* bring up the GPS settings */
        Intent intent = new Intent(
                android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(intent);
    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.v(tag, "Enabled");
        Toast.makeText(this, "GPS Enabled", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        /* This is called when the GPS status alters */
        switch (status) {
        case LocationProvider.OUT_OF_SERVICE:
            Log.v(tag, "Status Changed: Out of Service");
            Toast.makeText(this, "Status Changed: Out of Service",
                    Toast.LENGTH_SHORT).show();
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            Log.v(tag, "Status Changed: Temporarily Unavailable");
            Toast.makeText(this, "Status Changed: Temporarily Unavailable",
                    Toast.LENGTH_SHORT).show();
            break;
        case LocationProvider.AVAILABLE:
            Log.v(tag, "Status Changed: Available");
            Toast.makeText(this, "Status Changed: Available",
                    Toast.LENGTH_SHORT).show();
            break;
        }
    }

    @Override
    protected void onStop() {
        /* may as well just finish since saving the state is not important for this toy app */
        finish();
        super.onStop();
    }
}
Comments