2011-03-10 24 views
5

Qual è il modo migliore in Android per ottenere lo stato di un fornitore di posizione? Quando si registra un LocationListener per gli aggiornamenti di posizione, la chiamata onStatusChanged(String provider, int status, Bundle extras) verrà richiamata ogni volta che lo stato viene modificato. Tuttavia, non ho trovato un modo per ottenere lo stato corrente (AVAILABLE, OUT_OF_SERVICE, TEMPORARILY_UNAVAILABLE) senza registrarsi agli aggiornamenti di posizione. Il metodo isProviderEnabled indica solo se il provider è generalmente attivato o meno (nelle impostazioni del dispositivo), quindi potrebbe restituire true anche se il provider è fuori servizio ... C'è un altro modo per farlo?: Ottieni lo stato del provider

Un'altra domanda: è possibile ascoltare gli aggiornamenti di stato senza registrarsi per gli aggiornamenti di posizione? Voglio ascoltare un fornitore specifico per le località, ma allo stesso tempo controllare se altri sono disponibili. La mia soluzione attuale è impostare il tempo e la distanza minimi a un valore molto alto, ma mi chiedo se c'è una soluzione migliore ...

Grazie per eventuali suggerimenti!

BTW: se possibile, le soluzioni dovrebbero funzionare con Android 1.1

+0

Non so come fare quello che vuoi. Ma potresti ottenere l'ultima posizione nota ('LocationManager.getLastKnownLocation') e vedere se è recente. Questo ti darebbe una stima se il provider è disponibile o meno. –

risposta

2

Perché vuoi lo stato del GPS, se non siete interessati alla posizione?

Tuttavia, è possibile ottenere almeno alcuni aspetti sullo stato del GPS in questo modo:

final GpsStatus gs = this.locationManager.getGpsStatus(null); 
int i = 0; 
final Iterator<GpsSatellite> it = gs.getSatellites().iterator(); 
while(it.hasNext()) { 
    it.next(); 
    i += 1; 
} 
this.gpsSatsAvailable = i; 

Vedi http://developer.android.com/reference/android/location/GpsStatus.html Avrete bisogno di almeno 4 satelliti per fix 2D accurata, e 5 per una correzione 3D (incl. altitudine). Secondo la documentazione, è necessario accedere allo stato da onStatusChanged() per ottenere informazioni coerenti. Funziona anche da fuori questo metodo. Il documento collegato spiega quali problemi possono verificarsi. Ovviamente, devi ancora ascoltare gli aggiornamenti della posizione, perché altrimenti lo stato del GPS non viene aggiornato.

+0

Perché? Nel mio caso, sto sviluppando un'app tecnica che visualizza una schermata di stato di vari sensori connessi onboard e bluetooth, quindi avere un valore iniziale da visualizzare ha senso. Più filosoficamente, se lo "stato" è abbastanza importante da meritare il proprio gestore di cambiamenti, sicuramente è abbastanza importante essere in grado di interrogare il suo valore corrente? – GISmatters

+0

Hai un punto lì. – Stefan

Problemi correlati