2013-07-09 14 views
6

Sto sviluppando un'applicazione Android in cui la posizione attuale e precisa è la chiave. Dopo aver rilevato la correzione GPS, passa all'attività successiva.Android: ottieni solo la posizione recente, non getLastKnownLocation?

Il problema è che l'ho provato all'aperto e ho scoperto che a volte utilizza solo una posizione da una correzione precedente.

Quindi, quello che sto chiedendo; c'è qualche altra logica per ottenere la posizione da LocationManager diverso da getLastKnownLocation? Non ho ancora trovato un esempio che non sarebbe simile

Location location = locationManager.getLastKnownLocation(provider); 

Grazie!

risposta

2

Ecco il codice di esempio dal official guide (con piccole modifiche):

// Acquire a reference to the system Location Manager 
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

// Define a listener that responds to location updates 
LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     makeUseOfNewLocation(location); 
    } 

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

// Register the listener with the Location Manager to receive location updates 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

Qui, è sufficiente richiedere gli aggiornamenti dal GPS, e non appena la posizione viene ricevuto, si otterrà un callback chiamata.

+0

Questo ha fatto per me! Naturalmente, nel mio caso, non ho o non ho bisogno di una posizione fino a quando non _changes_. Se chiamo il mio prossimo metodo da "onLocationChanged" non ho nemmeno bisogno di ascoltare la correzione GPS. Grazie! – dhafnar

+0

Ho fatto lo stesso codice..ma onLocationChanged() non è mai stato chiamato..Non so qual è il problema –

2

È possibile utilizzare LocationListener e quindi chiamare locationManager.requestLocationUpdates() passando la propria implementazione listener.

1

Google ha rilasciato la nuova Location API, controllare questo link out https://developer.android.com/training/location/index.html,

per mettere in discussione, è necessario implementare percorso di aggiornamento di callback per ottenere la posizione corrente. https://developer.android.com/training/location/receive-location-updates.html

+0

Ho testato la nuova API di posizione, non è necessario specificare il provider di posizione per ottenere più gli aggiornamenti di posizione. LocationClient lo farà per te per ottenere gli aggiornamenti sulla posizione (come in iOS). Nella nuova API, devi solo utilizzare LocationRequest per impostare i parametri del servizio come intervallo di aggiornamento, precisione della posizione. Quindi lasciare LocaitonClient per recuperare gli aggiornamenti di posizione. – pkliang