Domanda

La mia applicazione utilizza LocationListener per tenere traccia della posizione corrente. Fino a quando il provider GPS fornisce correzioni periodiche questo funziona bene. Tuttavia, voglio la mia app per avvisare l'utente se la posizione non è più affidabile in quanto la correzione non è più attuale. Ho quindi utilizzato un timeCheckHandler per chiamare getLastKnownLocation ogni pochi secondi.

Il mio problema è che anche quando le correzioni accurate vengono ricevuti spesso il tempo restituito da applicare getTime () per la posizione restituito da getLastKnownLocation è generalmente più vecchio del tempo corrente restituito da System.currentTimeMillis (), spesso di circa 20 secondi.

ho indagato ulteriormente il problema con l'aggiunta di codice al onLocationChanged (arg0) per registrare il tempo della correzione (arg0.getTime ()) e l'ora corrente (System.currentTimeMillis ()). Anche in questo caso vedo una differenza di circa 20 secondi.

Il codice attualmente recita come segue:

    public void onLocationChanged(Location arg0) {
    mapview.handleLocationChanged(mapview, arg0.getLatitude(), arg0.getLongitude(), arg0.getBearing(), arg0.getAccuracy(), "GPS fix");
    addDebugNote("Fix received at time: "+Long.toString(arg0.getTime()/1000)+" Now: "+Long.toString((System.currentTimeMillis())/1000));
}

e output tipico al mio file di debug si legge:

Fix received at time: 1292091908 Now: 1292091928

Perché dovrei essere vedendo questa differenza tra il tempo di correzione e l'ora corrente del sistema?

Devo accettare che una differenza di circa 20 secondi è normale?

È stato utile?

Soluzione

GPS posizione in tempo arriva indipendentemente dal vostro tempo di rete volta fornitore / dispositivo. System.currentTimeMillis () vi darà il tempo impostato dispositivo sul dispositivo.

Se volete sapere come recente il punto è possibile:

  1. Sincronizza sia i tempi (GPS e dispositivi) nel codice all'avvio dell'applicazione prendendo la differenza tra i due, non appena si arriva primo aggiornamento posizione GPS. A quel tempo dispositivo di interrogazione immediata e vedere qual è la differenza in entrambi. Salva questa differenza di variabile.

  2. Utilizzare questo come un fattore di correzione nei successivi aggiornamenti sulla posizione di conoscere l'ora esatta in base al sistema di riferimento è necessario. (Tempo di dispositivo o GPS)

Anche io aveva scoperto che utilizzando la rete come fornitore di posizione che si può ottenere solo il tempo del dispositivo. Quindi, se si sta ascoltando su aggiornamenti da entrambi (GPS e la rete), potrebbe anche essere necessario per distinguere questa utilizzando location_obj.getProvider () e filtro dal fornitore di GPS.

Altri suggerimenti

Ripetendo il test di oggi ho trovato che la differenza tra il tempo GPS e il tempo di sistema è di 22 secondi. Questo problema è discusso altrove sul web e sembra che è normale che ci sia una differenza tra il tempo GPS e l'ora di sistema del telefono (che nel mio caso è impostato per essere aggiornato automaticamente dalla rete.) Un fattore è che il GPS il tempo è di circa 15 o 17 secondi (a seconda di quale fonte è corretto) da tempo UTC ... è out-of-sync perché il tempo GPS non è stato aggiornato dal 1980 per il periodico "secondo salto".

In considerazione di ciò credo che la risposta al mio bisogno di verificare come corrente l'ultima correzione è sarà quello di confrontare l'ora di sistema corrente con il tempo di sistema (non il tempo GPS) di ultima correzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top