Android LocationClient.getLastLocation () devuelve la ubicación antigua e inexacta con una nueva marca de tiempo
He estado usando el proveedor de ubicación fusionado desde su lanzamiento y estoy bastante contento con él (mucho mejor que el sistema antiguo). Pero me encontré con un problema peculiar cuando se utiliza geofencing en combinación con LocationClient.lastKnownLocation (). La configuración es la siguiente:
Dejo caer varias geofencias alrededor de un lugar de origen (con rangos cada vez mayores). Cuando obtengo la intención de que una valla se cruza, recupero la última ubicación conocida de LocationClient y trabajo con ella. Aparte de que también me registré para las actualizaciones regulares de la ubicación con el modo de actualización PRIORITY_BALANCED_POWER_ACCURACY.
- La actualización de la ubicación del fondo Android no aparece cuando la pantalla está desactivada
- Cálculo de distancia desde mi ubicación hasta la ubicación de destino en android
- Cómo encontrar el código postal por latitud y logitud para el Reino Unido
- Cómo obtener Ciudad y País de un usuario en android sin GPS?
- Emulador de Android - DDMS "control de emulador" está deshabilitado mientras ejecuta buildroid / emulador basado en virtualbox
La mayoría de las veces esto funciona perfectamente bien, pero a veces esto sucede:
Tiempo 000 s – (Lat, Lon, Exactitud) = (48,12316,11,5855167,683,0)
Tiempo 120 s – (Lat, Lon, Exactitud) = (48,1260497,11,5731745,31,823)
Tiempo 300 s – (Lat, Lon, Exactitud) = (48,1217455,11,5641666,143,81)
Tiempo 420 s – (Lat, Lon, Exactitud) = (48.1189942,11.559061,36.0)
Tiempo 600s – (Lat, Lon, Exactitud) = (48,12316,11,5855167,683.0)
Observe que todas estas ubicaciones son recuperadas por getLastKnownLocation () . Lo que parece sospechoso aquí es que la primera y la última ubicación son idénticas (incluso en los otros atributos), para ser más específico:
* intent at time 0: * component: ComponentInfo{package.Class} key [location]: Location[mProvider=fused,mTime=1373524391934,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]] * intent at time 600: * component: ComponentInfo{package.Class} key [location]: Location[mProvider=fused,mTime=1373524994871,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]] * note the ~600 s difference in the timestamp *
No entiendo cómo esto puede suceder, pues ha habido localizaciones en medio que eran más recientes y más exactos. También la nueva marca de tiempo en una antigua ubicación me hace curioso … aparentemente cosas similares sucedieron cuando se utiliza la API de edad , pero este nuevo proveedor de ubicación se llama simplemente fused
, por lo que no puedo distinguir GPS de WPS de sensores … Si es El problema de conmutación de torre de celda (descrito en la pregunta relacionada con el API antiguo) entonces ¿por qué el teléfono se conectaría a una torre "lejana" si hubiera visto torres más cercanas?
¿Por qué está pasando esto?
- Detectar o impedir si el usuario utiliza una ubicación falsa
- Diferencia entre LocationRequest setInterval (long millis) y LocationRequest setFastestInterval (long millis)
- Android mejor manera de obtener la ubicación repetidamente en el fondo considerando la batería así
- Geofences no funciona cuando se mata la aplicación
- Dar localización falsa al emulador de Genymotion
- RuntimeException en el análisis de Gson JSON: Error al invocar java.lang.ClassLoader protegido () sin args
- Android: ¿Una forma sencilla de hacer una geofence?
- La ubicación de la red Android tarda horas en actualizar la ubicación
El primero y el último punto se obtuvieron utilizando la triangulación celular. El error / precisión es típico de la ubicación basada en celdas, y parece que la lógica de ahorro de energía de Google decidió que el cambio a la celda estaría bien, incluso si usted dice que su historia reciente incluía puntos mucho más cerca.
¡Oh, MUCHAS! Tengo esto también hoy … Y me mudé a la nueva ubicación de Google Play Services precisamente para evitar esto … Y yo estaba tan emocionado hasta ahora cuando lo conseguí también. Usted puede o no puede saber que el viejo tuvo este tipo de problemas, y fue un dolor.
Hay un montón de temas en relación con esto, incluyendo uno de mis propios 🙁
¿Por qué locationmanager devuelve viejas correcciones de ubicación con new gettime-timestamp?
Supongo que lo único que hay que hacer es evitar usar la ubicación en caché …
En lugar de sondear, se puede trabajar alrededor de una o más fuentes de inexactitud utilizando este mecanismo de suscripción.
LocationListener locListener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (location == null) return; // process these: // location.getLatitude(); // location.getLongitude(); // location.getAccuracy(); ... } ... } ((LocationManager) getSystemService(Context.LOCATION_SERVICE) .requestLocationUpdates(LocationManager.GPS_PROVIDER, minTimeMilliSec, minDistanceMeters, locListener));
- ¿El ID de barra de título / acción en android?
- Color de evento personalizado de Android CalendarView