2011-06-14 17 views
7

¿Cómo puedo actualizar los intervalos de tiempo y distancia, o llamar de nuevo a requestLocationUpdates con diferentes intervalos?intervalo de actualización en requestLocationUpdates

Mi código:

LocationManager locationManager = (LocationManager) activityObject.getSystemService(Context.LOCATION_SERVICE); 

    cll = new CheckinLocationListener(); 

    LocationProvider gps = locationManager.getProvider(LocationManager.GPS_PROVIDER); 

    // GPS 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, timeDelay, distanceDelay, cll); 

    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

onLocationChanged:

if(location.getSpeed()>=0 && location.getSpeed()<= 3) 
      { 
       LocationsModel.this.distanceDelay = 25; 
       LocationsModel.this.timeDelay = 10000; 
      } 
      else if(location.getSpeed()>=3 && location.getSpeed()<= 17) 
      { 
       LocationsModel.this.distanceDelay = 150; 
       LocationsModel.this.timeDelay = 60000; 
      } 
      else if(location.getSpeed()>=17) 
      { 
       LocationsModel.this.distanceDelay = 300; 
       LocationsModel.this.timeDelay = 240000; 
      } 

me gustaría utilizar los nuevos intervalos en el siguiente compás.

Respuesta

7

Tendrá que llamar primero al locationManager.removeUpdates(cll); y luego volver a registrarse para las actualizaciones utilizando su nuevo intervalo.

+0

Funciona, lo he puesto en LocationChanged después de las comprobaciones, pero se repite infinitamente, se inicia gps y lo apaga después de cada segundo. Entonces el icono de GPS parpadea continuamente, y obtengo una coordenada por cada segundo. – McDermott

+0

Tal vez deba cambiar su condición "me estoy moviendo" porque esto volverá a ser cierto incluso cuando esté estacionario o si LocationProvider no admite velocidad (debido a 'location.getSpeed ​​()> = 0'). Quizás esto debería ser 'location.getSpeed ​​()> = 0.5' para que no sea constante jabbering debido a pequeños movimientos. Tal vez también debería verificar primero 'location.hasSpeed ​​()'. –

+0

He intentado con location.hasSpeed ​​() y location.getSpeed ​​()> = 1, pero sigo recibiendo una coordenada cada segundo. Creo que cuando llamo a una nueva requestLocationUpdates, que invoca a LocationChanged de inmediato, se conecta a un proveedor gps, por lo que se repite. – McDermott