title: android get location from best provider available
body: <p>I have this code to get the best available provider</p>
  
  <pre><code>lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  
  locationListener = new MyLocationListener();
  Criteria criteria = new Criteria();
  criteria.setAccuracy(Criteria.ACCURACY_FINE);
  String provider = lm.getBestProvider(criteria, true);
  Location mostRecentLocation = lm.getLastKnownLocation(provider);
  if(mostRecentLocation != null) {
      latid=mostRecentLocation.getLatitude();
      longid=mostRecentLocation.getLongitude();
  }
  lm.requestLocationUpdates(provider, 1, 0, locationListener);
  </code></pre>
  
  <p>and then the listener</p>
  
  <pre><code>private class MyLocationListener implements LocationListener {
  
  @Override
  public void onLocationChanged(Location loc) {
    if (loc != null) {
      latid = loc.getLatitude();
      longid = loc.getLongitude();
      // if(loc.hasAccuracy()==true){
      accuracyd = loc.getAccuracy();
      String providershown = loc.getProvider();    
      accuracy.setText("Location Acquired. Accuracy:"
        + Double.toString(accuracyd) + "m\nProvider: "+providershown);
      accuracy.setBackgroundColor(Color.GREEN);
      // }
      userinfo=usernamevalue+"&amp;"+Double.toString(latid)+"&amp;"+Double.toString(longid);
      submituserlocation(userinfo);
     }
  }
  </code></pre>
  
  <p>When I tested it to a device(htc magic) I found out that when gps is disabled it locks from the network immediately. When I enable the gps it doesnt take any data from the network and waits till it locks from the gps.<br>
  I would like to lock the position like the google maps that until they have a good gps signal they use the network to determine my location.<br>
  I though the best criteria would do that but what they do is pick a provider once.<br>
  Is there something wrong with my code or I have to do threads and timeouts etc to make it happen?</p>