2013-07-09 3 views
6

Ich entwickle eine Android-Anwendung, in der der aktuelle und genaue Ort der Schlüssel ist. Nachdem GPS-Fix erkannt wurde, wird zur nächsten Aktivität gewechselt.Android: Nur aktuellen Standort abrufen, nicht getLastKnownLocation?

Das Problem ist, dass ich es im Freien getestet habe und festgestellt habe, dass es manchmal einen Speicherort von einem früheren Fix verwendet.

Also was ich fragen; Gibt es eine andere Logik, um den Standort von LocationManager anders als von getLastKnownLocation zu erhalten? Ich habe noch kein Beispiel gefunden, das nicht etwa wie folgt aussehen würde:

Location location = locationManager.getLastKnownLocation(provider); 

Danke!

Antwort

2

Hier ist der Beispielcode aus dem official guide (mit kleinen Änderungen):

// 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); 

Hier drin Sie fordern nur Aktualisierungen von der GPS, und sobald der Ort empfangen wird, erhalten Sie einen Rückruf erhalten Anruf.

+0

Das war es für mich! Natürlich, in meinem Fall habe oder brauche ich keinen Ort, bis es _changes_. Wenn ich meine nächste Methode von 'onLocationChanged' anrufe, muss ich nicht einmal nach GPS-Fix hören. Danke! – dhafnar

+0

Ich habe den gleichen code..but onLocationChanged() nie aufgerufen..Ich weiß nicht, was das Problem ist –

2

Sie können LocationListener verwenden und dann locationManager.requestLocationUpdates() Ihre eigene Listener-Implementierung übergeben.

1

Google hat eine neue Location API veröffentlicht, überprüfen Sie diesen Link aus https://developer.android.com/training/location/index.html,

für Sie in Frage, müssen Sie Standortaktualisierung Rückruf implementieren aktuellen Standort zu erhalten. https://developer.android.com/training/location/receive-location-updates.html

+0

Ich habe die neue Standort-API getestet, müssen Sie nicht den Standortanbieter angeben, um Standortaktualisierungen mehr zu erhalten. LocationClient wird es tun, um Ortsupdates zu erhalten (wie in iOS). In der neuen API müssen Sie nur LocationRequest verwenden, um die Serviceparameter wie Aktualisierungsintervall und Standortgenauigkeit festzulegen. Lassen Sie LocaitonClient dann Standortaktualisierungen abrufen. – pkliang

Verwandte Themen