unit studio should setsmallestdisplacement not marked locationrequest fused from apps and accessed android location fusedlocationproviderapi

studio - El proveedor de ubicación fusionado setsmallestDisplacement no funciona en Android



locationrequest setsmallestdisplacement android (2)

Hola, he implementado el proveedor de ubicación fusionada Api para obtener actualizaciones de ubicación en un servicio. Pude hacer que el evento onlocationchanged se activara de acuerdo con el intervalo establecido. Sin embargo, cuando configuro setsMallestDisplacement a 10 metros, el evento se dispara incluso si el dispositivo está quieto. ¿Alguien tiene un problema similar a esto? por favor proporcione sugerencias A continuación se muestra el código

mlocationrequest = LocationRequest.create(); mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mlocationrequest.setInterval(60000); // Update location every 1 minute mlocationrequest.setFastestInterval(10000); mlocationrequest.setSmallestDisplacement(10); LocationServices.FusedLocationApi.requestLocationUpdates( mGoogleApiClient, mlocationrequest, this);

Para encontrar la distancia entre dos valores de ubicación, he usado este método.

public static float distFrom (float lat1, float lng1, float lat2, float lng2 ) { double earthRadius = 3958.75; double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); double dist = earthRadius * c; int meterConversion = 1609; return new Float(dist * meterConversion).floatValue(); }

Pero obtengo las distancias como 43.51, 49.32, 520.02 incluso cuando el dispositivo está quieto. ¿Es porque la tableta estoy usando en interiores?


Puede suceder que esté obteniendo una onLocationChanged diferente en el método onLocationChanged que describe más desplazamientos que en 10. Así que, por favor, revise la latitud que está obteniendo y mida la distancia una vez para verificar las cosas manualmente.

Aparte de lo anterior, una razón más posible es una cuestión de prioridad. Si el caso anterior parece correcto, intente lo siguiente:

mlocationrequest = LocationRequest.create(); mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mlocationrequest.setSmallestDisplacement(10); mlocationrequest.setInterval(60000); // Update location every 1 minute mlocationrequest.setFastestInterval(10000);


Si el desplazamiento está configurado para LocationRequest, no hay posibilidad de obtener las ubicaciones si el dispositivo sigue siendo el desplazamiento, ya que el desplazamiento tiene prioridad sobre los intervalos (intervalo e intervalo más rápido). Como podría adivinar, es posible que haya pasado un objeto LocationRequest diferente (sin conjunto de desplazamiento) a LocationServices.FusedLocationApi.requestLocationUpdates ().

Estaba buscando una respuesta a cómo se reciben las ubicaciones si se configuran tanto el intervalo como el desplazamiento. Acabo de verificar por mí mismo con mi aplicación y a continuación se muestra el comportamiento de la configuración diferente para LocationRequest:

  1. Sin conjunto de parámetros de desplazamiento
    setInterval se establece en 1 min y el más rápido en 1 min.

    Recibí la ubicación cada minutos. Pero ves que a veces se recibió rápido y otras más lento, lo que se debe a que setInterval es inexacto.

06-03 11: 46: 55.408 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 47: 56.008 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 48: 18.768 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 49: 22.938 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 50: 22.948 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 52: 22.978 25776-25776 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 53: 22.998 25776-25776 / MyLocationListener ﹕ onLocationChanged.

  1. El parámetro de desplazamiento se establece en 10 metros.
    setInterval como arriba 1 minutos.

    No se reciben actualizaciones de ubicación si el dispositivo no se mueve o cruza esa distancia. Entre cada onLocationChanged a continuación, caminé más de 10 metros, así que recibí la ubicación.

06-03 11: 26: 53.328 16709-16709 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 35: 38.318 16709-16709 / MyLocationListener ﹕ onLocationChanged.
06-03 11: 39: 16.728 16709-16709 / MyLocationListener ﹕ onLocationChanged.