title: How to use Android LocationManager and Listener
body: <p>I'm not having any luck receiving any data from the GPS using the code below, and i'm not sure what I'm doing wrong, it seems like my code matches everything i see online. i'd like to eventually add this to a background service to log gps coordinates even when the activity isn't visible or if other apps are open and if the speed is greater than a certain defined amount, but at this point I can't even get any of the data to show up. i'm relatively new to android but i can't figure out what am i doing wrong?</p>
  
  <pre><code>public class MainActivity extends Activity {
  TextView textView;
  MyLocationListener myLocationListener;
  LocationManager lm;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      this.textView = (TextView)findViewById(R.id.message);
      addLocationListener();
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  private void addLocationListener()
  {
      lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  
      Criteria c = new Criteria();
      c.setAccuracy(Criteria.ACCURACY_FINE);
  
      final String PROVIDER = lm.getBestProvider(c, true);
  
      this.myLocationListener = new MyLocationListener();
      this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0.0F, this.myLocationListener);
      //lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0.0F, myLocationListener);
      Log.d("LOC_SERVICE", "Service RUNNING!");
  }
  
  public void updateLocation(Location location)
  {
      double latitude, longitude;
  
      latitude = location.getLatitude();
      longitude = location.getLongitude();
      int mph = convertSpeed(location.getSpeed());
      Log.d("LOC_SERVICE", "mph: "+mph);
      this.textView.setText(this.textView.getText()+"\n"+"lat: "+latitude+" lng: "+longitude+" mph: "+mph);
  }
  
  
  private int convertSpeed(float speed) {
      int mph =(int)(2.236936D * speed);
      return mph;
  }
  
  
  class MyLocationListener implements LocationListener {
      @Override
      public void onLocationChanged(Location location) {
          Log.d("LOC_SERVICE", "Listener RUNNING!");
          updateLocation(location);
      }
      @Override
      public void onProviderDisabled(String provider) {}
      @Override
      public void onProviderEnabled(String provider) {}
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {}
  }
  }
  </code></pre>