¿Existe una alternativa al Cliente de ubicación (API de Google Play)?

Trabajo en una aplicación que utiliza datos de ubicación, y que necesita para trabajar en China. Los dispositivos Android que se venden aquí en gran parte no tienen la API de Google Play instalada en absoluto y la única manera es arraigar el teléfono para instalarlo. Así que estoy atascado con LocationManager que funciona mucho peor que LocationClient (parte de Google Play API).

Mi problema es que LocationManager, al leer de GPS_PROVIDER, con frecuencia no puede conectarse a suficientes satélites (en China) y hay ocasionales brecha de tiempo significativa entre las correcciones. Cuando leo NETWORK_PROVIDER, puedo obtener correcciones más frecuentes, pero la precisión varía de 30 a 500. En ningún lugar cerca de la calidad de la API de LocationClient.

La aplicación se supone para controlar su movimiento a través de las calles con frecuencia, por ejemplo. Actualizar cada segundo (alto uso de la batería, no es un problema para mi cliente) y hacer algo cuando llegue a ciertas ubicaciones.

Si utilizo Google Play API y LocationClient, realmente funciona bien. Pero eso es sólo en Nexus4 o algún dispositivo Android no chino.

Estoy preguntando si alguien sabe una biblioteca que puede dar mejores resultados que el uso directo de LocationManager, o una solución de cómo utilizar LocationManager para mejorar los resultados?

El GPS no funciona bien debido a la falta de metadatos GPS requeridos (efemérides y datos de almanaque), o debido a la lenta adquisición de estos metadatos. Para este último caso, en la mayoría de los países los datos de efemérides GPS y de almanaque están disponibles a través de fuentes de red. Si no es así, el chip GPS tiene que descargarlo de los satélites, que puede tardar entre 5 y 20 minutos (el tiempo más rápido es cuando el flujo de datos inicial proporciona información suficiente para que el chip GPS adquiera un bloqueo). No estoy familiarizado con la disponibilidad de estos datos en China a través de fuentes de red, pero parece que no está ampliamente disponible de lo que están experimentando. (Palabras clave de google para más información: SUPL, efemérides, alamanac).

Cuando el GPS no está disponible o lento para obtener una cerradura, geolocalización de la red es el fallback, que utiliza puntos wifi y torres de células para triangular una posición. Esto requiere un servicio de Internet para que el dispositivo envíe las torres APs + que ve, y el servicio devuelve una ubicación. Los niveles de precisión de 30 a 500 metros son bastante buenos para esto.

(BTW, una posición de geolocalización de red también se utiliza para "sembrar" el chip GPS para ayudarlo a obtener un bloqueo más rápido)

La geolocalización de red en Android suele ser proporcionada por un servicio web de Google, pero el teléfono puede configurarse para utilizar otros proveedores por operadoras.

Puede evitar usar Google (Google Play o el servidor de geolocalización de red de Google) o el servicio de ubicación de red incorporado al intentar el servicio de geolocalización de red gratuito de Mozilla: https://location.services.mozilla.com/

Necesita solicitar una clave de API: https://location.services.mozilla.com/api Para un ejemplo de código: esta aplicación aporta datos y es un cliente para el servicio: https://github.com/mozilla/MozStumbler

Dudo que esto obtendrá una mejor precisión de geolocalización de red para el área en la que se encuentra, ya que ya están obteniendo buenos resultados, pero tal vez valga la pena investigar.

  • ¿Debería conectarse y desconectarse de Google Play Services en cada actividad?
  • Android Fused Location API - cómo utilizar PRIORITY_BALANCED_POWER_ACCURACY y PRIORITY_HIGH_ACCURACY en una aplicación?
  • ¿Cuándo debo desconectarme de Google Play Services en mi aplicación de Android?
  • Multiple LocationClients está interfiriendo?
  • GetTriggeringGeofences y getGeofenceTransition de LocationServices
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.