title: android check if user turned off location
body: <p>I am building an application in which I have to constantly save user's location and then send it to the server. For that, I am using FusedLocationApis in a service. For the first time, I am asking user to turn on locations.
  It is working perfectly.</p>
  
  <p>Now, what if the user unintentionally turns off the location. How should I inform him? Do developers have to take care of this or they just leave it to the user?</p>
  
  <p>I thought of giving him an android notification for this. For that, I need to constantly check our locations enabled in the service. I have a working code for that (function checkHighAccuracyLocationMode). But where should I do this check (checkHighAccuracyLocationMode) ?
  Which function is fired up every time in this service? Or If anyhow I can get a function that fires up when the user turned off his locations?</p>
  
  <p>This is my service :</p>
  
  <pre><code>public class locationUpdatesService extends Service implements
      GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
  
  private Location mLastLocation;
  private Location mCurrentLocation;
  private String mLastUpdateTime;
  private dataBaseHandler db_helper;
  
  @Override
  public int onStartCommand(Intent intent, int flags, int startId){
      initialise();
      return super.onStartCommand(intent, flags, startId);
  }
  
  @Override
  public void onCreate() {
      super.onCreate();
      db_helper = new dataBaseHandler(getApplicationContext(),dataBaseHandler.DATABASE_NAME,null,1);
  }
  
  @Override
  public void onDestroy() {
      stopLocationUpdates();
      singletGoogleClientApi.setinstancenull();
      singletLocationRequest.setinstancenull();
      super.onDestroy();
  }
  
  @Nullable
  @Override
  public IBinder onBind(Intent intent) {
      return null;
  }
  
  private void initialise(){
      Log.e("ghgdhu","qaws");
      if (singletGoogleClientApi.getinstance().getGoogleApiCLient() == null) {
          singletGoogleClientApi.getinstance().setmSingletGoogleApiClient(new GoogleApiClient.Builder(this)
                  .addConnectionCallbacks(this)
                  .addOnConnectionFailedListener(this)
                  .addApi(LocationServices.API)
                  .build());
          singletGoogleClientApi.getinstance().getGoogleApiCLient().connect();
          createLocationRequest();
      }
  
      if(!singletGoogleClientApi.getinstance().getGoogleApiCLient().isConnected()){
          singletGoogleClientApi.getinstance().getGoogleApiCLient().connect();
          createLocationRequest();
      }
  }
  
  protected void createLocationRequest() {
      if(singletLocationRequest.getinstance().getLocationRequest() == null) {
          singletLocationRequest.getinstance().setSingletLocationRequest(new LocationRequest()
          .setInterval(10000)
          .setFastestInterval(5000).setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
      }
  }
  
  public static boolean checkHighAccuracyLocationMode(Context context) {
      int locationMode = 0;
      String locationProviders;
  
      if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.KITKAT){
          //Equal or higher than API 19/KitKat
          try {
              locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
              if (locationMode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY){
                  return true;
              }
          } catch (Settings.SettingNotFoundException e) {
              e.printStackTrace();
          }
      }else{
          //Lower than API 19
          locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
  
          if (locationProviders.contains(LocationManager.GPS_PROVIDER) &amp;&amp; locationProviders.contains(LocationManager.NETWORK_PROVIDER)){
              return true;
          }
      }
      return false;
  }
  
  
  @Override
  public void onLocationChanged(Location location) {
      Log.e("qazxsw","inONLocationCHanged");
      mCurrentLocation = location;
      Log.e("loc : ",Double.toString(mCurrentLocation.getLatitude()));
      Toast.makeText(this, "My Location: "+Double.toString(mCurrentLocation.getLatitude())+ " , " + Double.toString(mCurrentLocation.getLongitude()),
              Toast.LENGTH_SHORT).show();
      mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
      if(!checkHighAccuracyLocationMode(getBaseContext())){
          Log.e("turned OFF","LOCATION");
      }
      else {
          Log.e("ONNNNN","LOCATION");
      }
      db_helper.Insert(mLastUpdateTime,mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());
  }
  
  protected void stopLocationUpdates() {
      LocationServices.FusedLocationApi.removeLocationUpdates(singletGoogleClientApi.
              getinstance().getGoogleApiCLient(), this);
  }
  
  @Override
  public void onConnected(@Nullable Bundle bundle) {
      startLocationUpdates();
  }
  
  protected void startLocationUpdates() {
      try {
          if(singletLocationRequest.getinstance().getLocationRequest()!=null &amp;&amp;
                  singletGoogleClientApi.getinstance().getGoogleApiCLient()!=null){
              Log.e("requesting","yES BRO");
              LocationServices.FusedLocationApi.requestLocationUpdates(
                      singletGoogleClientApi.getinstance().getGoogleApiCLient(), singletLocationRequest.getinstance().getLocationRequest(), this);
              mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                      singletGoogleClientApi.getinstance().getGoogleApiCLient());
          }
          else {
              initialise();
          }
      }
      catch (SecurityException e) {
          e.getStackTrace();
      }
  }
  
  @Override
  public void onConnectionSuspended(int i) {
      Log.e("ON CONNECTION SUSPENDED","PETROL");
  
  }
  
  @Override
  public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
      Log.e("COnnection ","DIESEL");
  
  }
  </code></pre>
  
  <p>}</p>