title: Service with Broadcast to say if GPS is enabled
body: <p>I want to detect the switch of GPS. </p>
  
  <p>My idea is to use IntentService and Broadcast intent.
  My service is running but my broadcast receiver doesn't work.</p>
  
  <p>I just wanna say to my HomeActivity if GPS is turn on/off by user. With this info, i will able to set up my GoogleMap with the current location.</p>
  
  <p>Thx !</p>
  
  <p>GpsService.java : </p>
  
  <pre><code>public class GpsService extends IntentService implements LocationListener {
  
      private final static String TAG = "com.example.smartoo.gpsservice";
  
      public GpsService () {
          super(TAG);
          Log.e("TAG", "GPS service k");
  
      }
  
      @Override
      public void onLocationChanged(Location location) {
  
      }
  
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
  
      }
  
      @Override
      public void onProviderEnabled(String provider) {
          if (LocationManager.GPS_PROVIDER.equals(provider)) {
              Intent i = new Intent("android.location.PROVIDERS_CHANGED");
              i.putExtra("enabled", 1);
              sendBroadcast(i);
          }
      }
  
      @Override
      public void onProviderDisabled(String provider) {
          if (LocationManager.GPS_PROVIDER.equals(provider)) {
              Intent i = new Intent("android.location.PROVIDERS_CHANGED");
              i.putExtra("disnabled", 1);
              sendBroadcast(i);
          }
      }
  
      @Override
      protected void onHandleIntent(Intent intent) {
  
      }
  }
  </code></pre>
  
  <p>HomeActivity.java</p>
  
  <pre><code>public class HomeActivity  extends ActionBarActivity implements LocationListener,
                                                                  GooglePlayServicesClient.ConnectionCallbacks, 
                                                                  GooglePlayServicesClient.OnConnectionFailedListener {
  
      //My attrs
      private GoogleMap mMap = null;
      Location currentLocation;
  
  
      /*
       * Initialize the Activity
       */
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.home_layout);
  
          //Get the map from xml file
          mMap = getMap();
  
          Intent i = new Intent(HomeActivity.this, GpsService.class);
          startService(i);
      }
  
      /*
       * Called when the Activity is restarted, even before it becomes visible.
       */
      @Override
      public void onStart() {
  
          super.onStart();
  
          final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
  
          //Check if GPS is enable on device.
          if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
              showGPSDisabledAlertToUser();
          }   
      }
  
  
  public class GpsLocationReceiver extends BroadcastReceiver {
  
          @Override
          public void onReceive(Context context, Intent intent) {
              if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {
                  int extra = intent.getIntExtra("enabled", -1);
                  //If GPS not enabled
                  if(extra == -1) {
                      extra = intent.getIntExtra("disabled", -1);
                      //If GPS not disabled
                      if (extra == -1) {
                          //Nothing
                      }
                      //If GPS disabled
                      else {
                          //Do something
                      }
                  }
                  //If GPS enabled
                  else {
                      Toast.makeText(HomeActivity.this, "GPS enabled", Toast.LENGTH_LONG).show();
                      currentLocation = getLocation();
                      setUpMapIfNeeded();
                 }
                  Toast.makeText(HomeActivity.this, "in onREceive", Toast.LENGTH_LONG).show();
              }
          }
      }
  }
  </code></pre>