Android obtener la ubicación del mejor proveedor disponible

Tengo este código para obtener el mejor proveedor disponible

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); 

Y luego el oyente

 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+"&"+Double.toString(latid)+"&"+Double.toString(longid); submituserlocation(userinfo); } } 

Cuando lo probé a un dispositivo (htc magic) me enteré de que cuando el gps está desactivado se bloquea de la red de inmediato. Cuando habilito el gps no toma ningún dato de la red y espera hasta que bloquea desde el gps.
Me gustaría bloquear la posición como los mapas de Google que hasta que tienen una buena señal GPS que utilizan la red para determinar mi ubicación.
Aunque el mejor criterio lo haría, pero lo que hacen es elegir un proveedor una vez.
¿Hay algo mal con mi código o tengo que hacer hilos y tiempos muertos etc para que esto suceda?

Tal vez usted puede tratar de escuchar tanto al proveedor de la red y el proveedor de gps para una cierta cantidad de tiempo y luego comprobar los resultados de los dos. Si no tiene resultados de los gps, utilice los resultados de la red en su lugar. Así es como lo hice.

Tal vez usted puede utilizar getBestProvider (Criteria criteria, boolean enabledOnly) de LocationManager con criterios como en este otro hilo . Consulte la documentación oficial .

Espero eso ayude

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.