2010-10-22 13 views
6

que tratar de conseguir la velocidad correcta en versiones de la función onLocationChanged, esto es mi clase:requestLocationUpdates intervalo en Android

public class LocationService extends Service implements LocationListener { 

Poner el MinTime en 6000 no ayuda, Wil seguir actualizando constantemente, lo que soy estoy haciendo mal?

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper) { 

Saludos

Respuesta

4

6000 en milisegundos es igual a 6 segundos, y puede parecer como actualizar contínuamente. De Android guía dev "MinTime bajo 60000ms no son recomendables" Tal vez vale la pena aumentar la cantidad hasta 60000ms

23

El MinTime es sólo una sugerencia para el LocationProvider, y no quiere decir que su oyente ubicación se llama una vez cada 6 segundos Recibirás más actualizaciones de ubicación y dependerá de tu código para elegir la más precisa.

Controle el ícono de GPS en su teléfono. Una llamada a requestLocationUpdates activará el GPS para ubicar su ubicación y enviará una o más actualizaciones de ubicación al oyente de ubicación si puede obtener una solución. (En este punto, su ícono de GPS debería estar animado mientras busca una ubicación).

Durante ese tiempo, su operador de ubicación puede recibir varias actualizaciones de ubicación. Su código puede ir y elegir la ubicación más precisa, y procesar solo esa.

Después de que el GPS haya enviado las actualizaciones de ubicación a su oyente, debe haber un período de inactividad. (su ícono de GPS debería desaparecer por un par de segundos). Este período de inactividad debe corresponderse con su minTime. El estado del GPS también cambiará, ya que se pondrá en TEMPORARILY_UNAVAILABLE.

Después de eso, se repite el mismo proceso. (El GPS estará DISPONIBLE, y nuevamente recibirá una o más actualizaciones de ubicación).

Además, tenga en cuenta que, si el GPS no puede obtener una corrección de ubicación, el icono del GPS permanecerá activo durante más de 6 segundos, pero no recibirá actualizaciones de ubicación.

También puede supervisar el estado de su proveedor de GPS a través de su oyente, mediante el siguiente método:

public void onStatusChanged(String provider, int status, Bundle extras) {} 

El estado es una de las siguientes constantes definidas en android.location.LocationProvider

public static final int OUT_OF_SERVICE = 0; 
public static final int TEMPORARILY_UNAVAILABLE = 1; 
public static final int AVAILABLE = 2; 

Eche un vistazo a Understanding the LocationListener in Android para ver un ejemplo sobre el comportamiento de MinTime y un escenario (que incluye algunos registros) para ayudarlo a comprender lo que está sucediendo.

Tenga en cuenta que ajustar los parámetros minTime y minDistance en el LocationManager y actuar sobre las actualizaciones de estado del GPS le permitirá ajustar con precisión el desarrollo de la ubicación del usuario.

+0

Gracias por la respuesta, esto me ayudó mucho en mi propio proyecto. Pensé que podría usar la API "tal como lo entendí", sin leer la referencia real, y pensé que todo el proceso de búsqueda de una actualización precisa de la ubicación ocurriría detrás de la escena; y que solo entonces mi LocationListener sería informado (después de un tiempo determinado o una distancia recorrida).Estoy bastante seguro de que la mayoría de la gente lo interpretaría de esta manera en su primer intento, pero ahora que veo cómo funciona, tuve que volver a trabajar un poco en mi código, ¡al menos funciona! Gracias de nuevo por la respuesta clara! – Warkst

Cuestiones relacionadas