IllegalArgumentException: el proveedor no exisit: null en Maps V1

Estoy utilizando Google Maps API V1. Tengo este error:

java.lang.IllegalArgumentException: provider doesn't exisit: null 

Este es mi código:

  locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); String provider = locationManager.getBestProvider(criteria, true); if (provider != null) { startTime = System.currentTimeMillis(); geoLocTimeOutTask = new GeoLocTimeOutTask(); geoLocTimeOutTask.execute(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } else { geoLocCallbackObj.geoLocationCallback(tagCallback); } 

Entiendo el error, pero mi pregunta es, whay el dispositivo me puso este error? ¿Y cómo puedo evitar esto por favor?

Está solicitando actualizaciones del proveedor de la red cuando ese proveedor no existe en el dispositivo. Puede reemplazar estas dos líneas:

 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

con

 locationManager.requestLocationUpdates(provider, 0, 0, locationListener); 

Usted ya ha ido al esfuerzo de encontrar el mejor proveedor que el dispositivo ofrece para sus criterios de modo que es el que usar.

Alternativamente, compruebe que el proveedor existe antes de registrarse para recibir actualizaciones:

 if (locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)) locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

También está utilizando cero para el tiempo y la distancia mínima. Esto es perfecto para realizar pruebas en un dispositivo virtual, pero recuerde cambiarlas cuando utilice un dispositivo real, de lo contrario el drenaje de la batería será alto.

El sugerido fue arreglar esto sería utilizar la nueva API de ubicación en lugar de la antigua http://developer.android.com/google/play-services/location.html

Pero realmente todo lo que tienes que hacer es hacer un cheque

 if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } 

Si el proveedor no está habilitado, entonces no pasará y no se bloqueará

Cuando el proveedor no es compatible, obtiene un error, la forma más fácil de eliminar este problema es usar un criterio.

 locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener); 

En el código

Criterios – los criterios que deben ser

El segundo arg que es un booleano:

EnabledOnly – si true hen sólo se devuelve un proveedor que está habilitado actualmente

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