Gerente de localización problema para helado sandwhich

¿Puede alguien explicarme cuál es este error? Estoy consiguiendo solamente para androide 4 + y no para abajo:

E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.getaddress/com.example.getaddress.MainActivity}: java.lang.IllegalArgumentException: requested provider network doesn't exisit

Parece que el proveedor de ubicación NETWORK_PROVIDER no es accesible en los emuladores de Android 4+ sin las API de Google ( bueno, en realidad no he probado en todos ellos, consulte a continuación ). Los dispositivos reales que he probado están bien con él (pero todos ellos tienen servicios de Google en ellos, sería interesante probar con las versiones personalizadas, limpias de Android, tal vez con Kindles?).

No se trata de activar / desactivar el proveedor en la configuración del dispositivo, simplemente no está en el emulador.

Síntoma

Básicamente este código:

 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,mLocListener); 

Causará la siguiente excepción:

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

En todos los emuladores Android 4 + desnudos (en contraposición a los emuladores vinculados a Google)

Nota: el error tipográfico en "exisit" está en la línea de registro actual.

Diagnóstico

Obtener una lista de todos los proveedores de ubicación en el dispositivo de destino con lo siguiente:

 List<String> providers = locationManager.getAllProviders(); 

Puedo ver que el proveedor de la red está presente en

  • Dispositivos físicos
  • Android 2.3.3 emulador (sin API de Google)
  • Android nivel 17 (4.2) emulador (con API de Google)

Pero no en

  • Android nivel 15 (4.0.3) emulador con API de Google
  • Android 4.2 emulador (sin API de Google)

Mi conjetura es que por razones no técnicas, Google no ha permitido el servicio de ubicación de red en AOSP y ha limitado su uso a las versiones vinculadas a Google del sistema operativo a partir de 4.2 (?).

Lo que no sé si existe o no un servicio de ubicación de red de reemplazo en dispositivos que no sean de Google (como Kindle).

Probable impacto en tu aplicación

No esperaría que esto tuviera algún impacto en la mayoría de los smartphones y tabletas. Sin embargo, puede

  • Afectan en algo su capacidad para
  • Ser un problema de compatibilidad para usuarios que usan versiones personalizadas / que no son de Google de Android (una vez más, Kindle?)

Cómo detectar

Una prueba simple como:

 locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) 

Puede decirle sin dolor si el proveedor de red está presente en el dispositivo. Tenga en cuenta que si está presente, pero el usuario no lo ha activado, su LocationListener recibirá una devolución de llamada onProviderDisabled después de la solicitud de ubicación.

  • Android: comprueba si el GPS está buscando, tiene una corrección o no está en uso
  • ¿Cómo puedo comprobar si el GPS está habilitado antes de intentarlo?
  • Android: obtener la ubicación actual del usuario sin utilizar gps o Internet
  • Intervalo de actualización en requestLocationUpdates
  • Google maps containsLocation en android
  • android obtener el nombre de ubicación actual
  • ¿Cuándo necesito android.hardware.location.gps y android.hardware.location.network?
  • ¿Utilizar el teléfono Android como ARM dev board?
  • Desactivar el icono de GPS cuando LocationListener está durmiendo
  • Android Fake GPS aplicaciones de ubicación ya no funcionan
  • Android getLatitude () devuelve latitud geodésica o geocéntrica?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.