2011-06-22 10 views
9

LocationManager#requestLocationUpdates le permite pasar un parámetro minTime y minDistance. Estoy teniendo dificultades para decidir cuáles deberían ser estos números, y podría apreciar alguna orientación.¿Cómo decido qué intervalo usar para requestLocationUpdates?

Nuestra aplicación no es una aplicación de navegación paso a paso; Solo quiero mostrar los 10 puntos de interés más cercanos. Dado que estoy mostrando los 10 más cercanos, pueden volverse un poco obsoletos, pero si el usuario está en un vehículo en movimiento, me gustaría/necesito actualizarlos con bastante frecuencia para evitar el estancamiento.

Imagino que mucha gente está en la misma situación de requisitos imprecisos: "No quiero que los datos estén demasiado obsoletos, pero no quiero desperdiciar batería". ¿Cómo puedo convertir estos requisitos imprecisos en números concretos?

+1

Las respuestas aquí se han quedado obsoletas, ahora [minTime tiene prioridad] (http://stackoverflow.com/a/16753705/281545) - por lo que ya no es irrelevante. –

Respuesta

3
***<Edit>*** 
As of JellyBean, the criteria is (minTime & minDistance), so it has 
to satisfy both to return a location. 
***</Edit>*** 

Según su problema, me parece que el parámetro minTime es irrelevante.

Lo que realmente debe preocuparse es minDistance, por lo que si un usuario se encuentra en un vehículo en movimiento rápido, se mantendrá al día.

Si una persona conduce 60 MPH, se mueven unos 27 metros por segundo.

Teniendo en cuenta este critera ... yo diría a utilizar:

MinTime = 60000 // actualizar cada 60 segundos
minDistance = 90 // en un vehículo en movimiento rápido, se actualizará aproximadamente una vez cada 3 segundos

+0

¿Cómo se te ocurrió 60000? ¿Por qué no mucho más? ¿O menos? –

+0

Es bastante aleatorio. No hay un número "correcto", pero una vez por minuto no matará a la batería, y al menos mantendrá sus resultados algo en el objetivo. El valor más importante es la distancia. Lo que debe decidir es: ¿hasta dónde puede viajar un automóvil antes de que sus datos se actualicen? Una milla? ¿media milla? ¿Más? ¿Menos? – Matt

+1

Lo sentimos, pero tiene que editar esto, ahora [minTime tiene prioridad] (http://stackoverflow.com/a/16753705/281545), por lo que ya no es irrelevante. –

3

se ha descrito bien en requestLocationUpdates docs

la frecuencia de notificación o nuevos ubicaciones puede ser controlada usando el MinTime y la mente parámetros de istancia Si minTime es mayor que 0, el LocationManager podría descansar durante minPrime milisegundos entre actualizaciones de ubicación para ahorrar energía. Si minDistance es mayor que 0, una ubicación solo se transmitirá si el dispositivo se mueve con medidores de minDistance. Para obtener notificaciones con tanta frecuencia como sea posible , ajustar ambos parámetros a 0. Servicios en segundo plano debe tener cuidado sobre la configuración de un nivel suficientemente alto MinTime de manera que el dispositivo no consumen demasiada energía, manteniendo los GPS o radios inalámbricos en todo el tiempo . En particular, no se recomiendan valores bajo 60000ms.

+0

"no se recomiendan los valores por debajo de 60000 ms" ¿Eso es cierto para los servicios de primer plano o solo para los servicios en segundo plano? (No soy un servicio en segundo plano.) ¿Cuál debería ser el valor para los servicios en primer plano que no necesitan la frecuencia máxima, como la mía? –

+0

es tanto para el servicio en segundo plano como para el servicio en primer plano. – Sujit

+1

la cita de los documentos ya no es válida –

1

Puedo sugerir una idea mejor que, inicialmente solicite actualizaciones con un intervalo un poco más grande y obtenga las ubicaciones. Ahora compruebe si la distancia entre las ubicaciones consecutivas es mayor que la distancia mínima para distinguir las ubicaciones más cercanas, cambie el intervalo de actualización de solicitud a un valor inferior. De manera similar, si en este intervalo inferior la distancia calculada es mucho menor que indica que el usuario no viaja a través del vehículo, entonces actualice el intervalo a un valor mayor. Para actualizar el intervalo, debe anular el registro de la escucha anterior y luego volver a registrarse con un nuevo valor.

0

Para su problema en cuestión, eche un vistazo al PASSIVE_PROVIDER. Básicamente lo ayudará a obtener actualizaciones cuando cualquier otra aplicación pueda solicitarlas.Entonces, puede usar esto junto con otro proveedor.

Cuestiones relacionadas