title: Android Service not receiving Location Updates
body: <p>Attempting to get LocationUpdates in my Service, however, it doesnt ever seem to fire the LocationListener.</p>
  
  <p>My Service starts a thread, which then loops with a Handler.postDelayed() - I originally used sleep(30000), however I thought this may have been preventing the locationUpdates. All the service does is launch this thread - and onStartCommand returns STICKY to keep it running:</p>
  
  <pre><code>public class TST extends Thread {
  
      final int DefaultNetworkTick = 120000; // 2 minutes
      final int DefaultLocationTick = 20000; //600000;  
      boolean CustomLocationUpdateTick = false; // If the network requests faster updates
      int CustomLocationUpdateTickMs = 600000; // Default 10 minutes
  
      public boolean kill = false;
      public Context context;
  
      Handler handler  = new Handler();
  
      Date nextNetworkReadTick;
  
      @Override
      public void run() {        
          Log.i("TST", "Start run() iteration");
          // Set the ticks to the appropriate values
          // Network gets read every 2 minutes
  
          nextNetworkReadTick = new Date();
          nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);
          Log.i("TST", "Set next Network tick to " + nextNetworkReadTick.toString());
          Looper.prepare();
          Log.i("TST", "Performing location update setup...");
          SetupLocationListenerDefault();
          handler.postDelayed(runFunc, 2000);
          Looper.loop();
      }
  
      // We do our networking and stuff in here
      public Runnable runFunc = new Runnable(){
          public void run()
          {
              Log.i("TST", "run() iteration");
  
              if( new Date().after(nextNetworkReadTick) ) {
                  // Set next tick
                  nextNetworkReadTick = new Date();
                  nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);
  
                  UpdateNetwork();
              }
  
              handler.postDelayed(runFunc, 1000);
          }
      };
  
      private void UpdateNetwork() {
              // TODO Auto-generated method stub
      }
  
      LocationManager locMgr;
  
      PendingIntent locationUpdateIntentPending;
      Intent locationUpdateIntent;
  
      LocationListener locationListener = new LocationListener()
      {
              @Override
              public void onLocationChanged(Location arg0) {
                      // TODO Auto-generated method stub
                      Log.i("TST", "OnLocationChanged: " + arg0.toString());
              }
  
              @Override
              public void onProviderDisabled(String provider) {
                      // TODO Auto-generated method stub
                      Log.i("TST", "OnProviderDisabled: " + provider);                
              }
  
              @Override
              public void onProviderEnabled(String provider) {
                      // TODO Auto-generated method stub
                      Log.i("TST", "OnProviderEnabled: " + provider);
              }
  
              @Override
              public void onStatusChanged(String provider, int status, Bundle extras) {
                      // TODO Auto-generated method stub
                      Log.i("TST", "OnStatusChanged");
              }
  
      };
  
      private void SetupLocationListenerDefault() {
          // Reset location manager
          if( locMgr != null ) {
                  locMgr.removeUpdates(locationListener);
                  locMgr = null;
          }
  
          locMgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
          Criteria criteria = new Criteria();
          criteria.setAccuracy(Criteria.ACCURACY_FINE);
          String provider = locMgr.getBestProvider(criteria, true);
  
          locMgr.requestLocationUpdates(provider, DefaultLocationTick, 0, locationListener);
      }
  
  }
  </code></pre>