setmaxwaittime locationrequest googleapiclient fused android gps location locationmanager

android - googleapiclient - Diferencia entre LocationRequest setInterval(long millis) y LocationRequest setFastestInterval(long millis)



locationrequest fused (4)

Estoy escribiendo mis propias actualizaciones de ubicación de fondo para intervalos de cada 5 minutos en Android. Me gustaría saber la diferencia entre setInterval y setFastestInterval

Cuando configuré Interval en 5 minutos y configuré el Intervalo más rápido en 2 minutos. La actualización de ubicación se llama cada 2 minutos.

Me gustaría saber la diferencia. No pude entender exactamente qué está escrito en la página del desarrollador para este https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

Además: ¿hay una función incorporada para verificar las actualizaciones de ubicación solo si las distancias de la primera actualización son más de 20 metros con la segunda actualización?

¡Gracias!


Además: ¿hay una función incorporada para verificar las actualizaciones de ubicación solo si las distancias de la primera actualización son más de 20 metros con la segunda actualización?

LocationRequest tiene un método que puede usar para establecer la distancia mínima entre actualizaciones.

int minimumDistanceBetweenUpdates = 20; LocationRequest request = new LocationRequest(); request.setMinimumDisplacement(minimumDistanceBetweenUpdates); // ... request.setInterval(interval); etc


Estoy escribiendo mis propias actualizaciones de ubicación de fondo para intervalos de cada 5 minutos en Android. Me gustaría saber la diferencia entre setInterval y setFastestInterval

Suponga que setFastestInterval(); tiene mayor prioridad para solicitar una Location . Para cualquier aplicación que establezca setFastestInterval(); será esa aplicación la que se ejecutará primero (incluso si otras aplicaciones usan LocationServices ).

ej .: si APP1 tiene setFastestInterval(1000 * 10) y APP2 tiene setInterval(1000 * 10) , ambas APPS tienen el mismo intervalo de solicitud. Pero es la APP1 la que hará la primera solicitud. (esto es lo que he entendido, la respuesta quizás no sea correcta)

Cuando setInterval en 5 minutos y setFastestInterval en 2 minutos . La location update se llama cada 2 minutos .

Si está usando setFastestInterval() junto con setInterval() la aplicación intentará realizar una solicitud para el tiempo dado en setFastestInterval() , es por eso que su aplicación realiza una solicitud cada 2 minutos .

Además: ¿hay una función incorporada para verificar las actualizaciones de ubicación solo si las distancias de la primera actualización son más de 20 metros con la segunda actualización?

Para realizar una solicitud cada 20 metros, puede crear un LocationModel

public class LocationModel { private double latitude; private double longitude; public LocationModel(){ } public double getLatitude() { return latitude; } public void setLatitude(double latitude) { this.latitude = latitude; } public double getLongitude() { return longitude; } public void setLongitude(double longitude) { this.longitude = longitude; } }

y en la primera solicitud, establece el lat y long a la ubicación actual (usando getLastLocation(); )

luego en onLocationChanged() obtienes los datos del objeto y lo comparas con la new Current Location

float distanceInMeters = distFrom((float)locationObj.getLatitude(), (float)locationObj.getLongitude(), (float)mCurrentLocation.getLatitude(), (float)mCurrentLocation.getLongitude());

utilizando esta función, que también es una sugerencia de los usuarios de SO

public static float distFrom(float lat1, float lng1, float lat2, float lng2) { double earthRadius = 6371; //kilometers 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)); float dist = (float) (earthRadius * c); return dist; }


mirando la referencia de Android en:
https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

setInterval (long) significa: establezca el intervalo en el que desea obtener ubicaciones. setFastestInterval (largo) significa: si una ubicación está disponible antes, puede obtenerla (es decir, otra aplicación está utilizando los servicios de ubicación).

Por ejemplo, inicia su aplicación y la registra a través de setInterval (60 * 1000), lo que significa que recibirá actualizaciones cada 60 segundos.
Ahora llama a setFastestInterval (10 * 1000). Si usted es la única aplicación que utiliza los servicios de ubicación, continuará recibiendo actualizaciones cada 60 segundos. Si otra aplicación está utilizando los servicios de ubicación con una mayor tasa de actualizaciones, obtendrá más actualizaciones de ubicación.

Creo que tiene un buen impacto en la duración de la batería consumida por su aplicación, usted define la cantidad máxima de tiempo que puede esperar mientras dice que si hay una actualización disponible, la quiere. El consumo de batería se acreditará a la aplicación que solicitó las actualizaciones más frecuentes y no la suya.


setInterval (long millis) Este intervalo es inexacto. Es posible que no reciba actualizaciones en absoluto (si no hay fuentes de ubicación disponibles), o puede recibirlas más lentamente de lo solicitado. También puede recibirlos más rápido de lo solicitado (si otras aplicaciones solicitan ubicación en un intervalo más rápido). La tasa más rápida de que recibirá actualizaciones se puede controlar con setFastestInterval (largo). Por defecto, esta tasa más rápida es 6 veces la frecuencia del intervalo.

setFastestInterval (long millis) A diferencia de setInterval (long), este parámetro es exacto. Su aplicación nunca recibirá actualizaciones más rápido que este valor. Si no llama a este método, se seleccionará un intervalo más rápido para usted. Será un valor más rápido que su intervalo activo (setInterval (long)).