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
ysetFastestInterval
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 ysetFastestInterval
en 2 minutos . Lalocation 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)).