2010-10-22 2 views
6

cerco di ottenere la corretta velocità negli aggiornamenti per la funzione onLocationChanged, questa è la mia classe:requestLocationUpdates in Android

public class LocationService extends Service implements LocationListener { 

Mettere il MINTIME sul 6000 non aiuta, wil mantenere l'aggiornamento costante, che cosa sono sto sbagliando?

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

Saluti

risposta

4

6000 in millisecondi è uguale a 6 secondi, e può sembra come l'aggiornamento continiously. Da Android guida dev "MINTIME sotto 60000ms non sono raccomandati" Forse vale la pena di aumentare a 60000ms

23

Il MINTIME è solo un accenno per il LocationProvider, e non significa che la tua posizione ascoltatore si chiamerà una volta ogni 6 secondi. Riceverai più aggiornamenti sulla posizione e fino al tuo codice per scegliere quello più accurato.

Monitorare l'icona GPS sul telefono. Una chiamata a requestLocationUpdates attiverà il GPS per individuare la tua posizione, e invierà uno o più aggiornamenti di posizione al localizzatore di posizione se è in grado di ottenere una correzione. (A questo punto, l'icona GPS dovrebbe essere animata mentre cerca una posizione).

Durante questo periodo, il localizzatore di posizione potrebbe ricevere diversi aggiornamenti di posizione. Il tuo codice può andare a scegliere la posizione più precisa ed elaborare solo quella.

Dopo che il GPS ha inviato gli aggiornamenti di posizione all'ascoltatore, ci dovrebbe essere un periodo di inattività. (l'icona GPS dovrebbe scomparire per un paio di secondi). Questo periodo di inattività deve corrispondere al tempo minimo. Anche lo stato del GPS cambierà, poiché verrà messo in TEMPORARILY_UNAVAILABLE.

Dopodiché, lo stesso processo viene ripetuto. (Il GPS diventa DISPONIBILE e riceverai di nuovo uno o più aggiornamenti di posizione).

Considerare anche, se il GPS non è in grado di ottenere una correzione di posizione, l'icona GPS rimarrà attiva per più di 6 secondi, ma non si riceveranno aggiornamenti di posizione.

È anche possibile monitorare lo stato del vostro provider GPS attraverso il vostro ascoltatore, tramite il seguente metodo:

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

Lo stato è uno dei seguenti costanti definite sulla android.location.LocationProvider

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

Dai un'occhiata a Understanding the LocationListener in Android per un esempio sul comportamento minTime, e uno scenario (compresi alcuni log) per aiutarti a capire cosa sta succedendo.

Ricordare che modificare i parametri minTime e minDistance sul LocationManager e agire in base agli aggiornamenti dello stato GPS consente di ottimizzare lo sviluppo della posizione dell'utente.

+0

Grazie per la risposta, questo mi ha aiutato molto nel mio progetto. Ho pensato che avrei potuto usare l'API "come l'ho capito", senza leggere il riferimento effettivo, e ho calcolato che l'intero processo di recupero di un accurato aggiornamento di posizione sarebbe accaduto dietro la scena; e che solo allora il mio LocationListener sarebbe stato informato (dopo un determinato tempo o distanza percorsa).Sono quasi certo che la maggior parte delle persone lo interpreterebbe in questo modo al loro primo tentativo, ma ora vedo come funziona effettivamente ho dovuto rielaborare il mio codice un po '- almeno funziona! Grazie ancora per la risposta chiara! – Warkst