¿Cómo cambio entre el GPS y el proveedor de la red?

En mi aplicación, quiero usar ambos proveedores de ubicación.

Eso significa que si el gps está desactivado, quiero que mi aplicación cambie a la red, y cuando gps está habilitado para cambiarla de nuevo.

Estoy utilizando dos LocationListener para manejar esas dos solicitudes.

public void onStatusChanged(String provider, int status,Bundle extras) switch (status) { case LocationProvider.TEMPORARILY_UNAVAILABLE: ...... break; case LocationProvider.OUT_OF_SERVICE ..... break; case LocationProvider.AVAILABLE ..... break; } 

Y en cada oyente, detecto esos onStatusChanged() en el onStatusChanged() . Resulta que este método se utilizará en el primer cambio (red deshabilitada), pero cuando vuelvo a habilitar la red, no muestra nada. ¿Por qué? El oyente no detectará el estado todo el tiempo ??

Por favor, ayúdame, lo mejor sería publicar la solución en el código … Gracias!

Su respuesta está aquí ¿Cuál es la manera más sencilla y más robusta de obtener la ubicación actual del usuario en Android? . En este Fedor muy bien explicado con el ejemplo de cómo cambiar de proveedor de ubicación.

Gracias.

Esto es lo que hago:

 public class LocationActivity extends Activity implements LocationListener{ private TextView latituteField; private TextView longitudeField; private LocationManager locationManager; private String provider; private TextView outputField; private Location location; private ScrollView scrollView; private Criteria criteria; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); latituteField = (TextView) findViewById(R.id.lat_textView); longitudeField = (TextView) findViewById(R.id.long_textView); outputField = (TextView) findViewById(R.id.output_textView); scrollView = (ScrollView) findViewById(R.id.scrollView1); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); List<String> providers = locationManager.getProviders(criteria, true); outputField.append("Providers available..." + "\n"); for (String provider : providers) { outputField.append(provider + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } provider = locationManager.getBestProvider(criteria, true); locationManager.requestLocationUpdates(provider, 400, 1, this); if (provider != null) { outputField.append("Provider " + provider + " has been selected." + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); if (location != null) { onLocationChanged(location); } else { latituteField.setText("Location not available"); longitudeField.setText("Location not available"); } } else { outputField.append("No provider selected" + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } } @Override protected void onResume() { super.onResume(); locationManager.requestLocationUpdates(provider, 400, 1, this); } protected void onPause() { super.onPause(); locationManager.removeUpdates(this); } @Override public void onLocationChanged(Location location) { double lat =location.getLatitude(); double lng =location.getLongitude(); latituteField.setText(String.valueOf(lat)); longitudeField.setText(String.valueOf(lng)); outputField.append("New Location: " + String.valueOf(lat) + " " + String.valueOf(lng) + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } @Override public void onProviderDisabled(String dProvider) { outputField.append("Provider " + dProvider + " has been disabled." + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); provider = locationManager.getBestProvider(criteria, true); locationManager.requestLocationUpdates(provider, 400, 1, this); if (provider != null) { outputField.append("Provider " + provider + " has been selected." + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); if (location != null) { onLocationChanged(location); } else { latituteField.setText("Location not available"); longitudeField.setText("Location not available"); } } else { outputField.append("No provider selected" + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } } @Override public void onProviderEnabled(String eProvider) { outputField.append("Provider " + eProvider + " has been enabled." + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); provider = locationManager.getBestProvider(criteria, true); locationManager.requestLocationUpdates(provider, 400, 1, this); if (provider != null) { outputField.append("Provider " + provider + " has been selected." + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); if (location != null) { onLocationChanged(location); } else { latituteField.setText("Location not available"); longitudeField.setText("Location not available"); } } else { outputField.append("No provider selected" + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { outputField.append("Provider " + provider + " status changed to: " + Integer.toString(status) + "\n"); scrollView.fullScroll(ScrollView.FOCUS_DOWN); } } 
  • ¿Ha cambiado el comportamiento NETWORK_PROVIDER en Android 4.1.1?
  • Localización fuera de línea basada en la aplicación Android
  • encontrar la farmacia más cercana en google maps
  • Activar servicios de ubicación sin navegar a la página de configuración
  • Google Maps API V2 Zoom a la ubicación actual
  • Obtener el radio del mapa visible en Android
  • Solicitando actualización de una sola ubicación, AVD se bloquea
  • Cómo obtener la ubicación del usuario Android
  • Servicio de Android que no recibe Actualizaciones de ubicación
  • ¿Cómo puedo obtener la ubicación GPS actual mediante programación en Android?
  • Por qué getSpeed ​​() siempre devuelve 0 en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.