Meine App überprüft zu einem bestimmten Zeitpunkt, ob sich ein Benutzer an einem bestimmten Standort befindet. Ich benutze den Alarmmanager einen Dienst zu starten, die diesen Aufruf macht:Android - Zuverlässiger Zugriff auf den aktuellen Standort
locationManager.requestLocationUpdates(bestProvider, 0, 0, listener);
Und auch überprüft:
locationManager.getLastKnownLocation(bestProvider);
Aber ich habe Probleme, wenn sie auf einem realen Gerät läuft. Zum einen ist getLastKnownLocation
höchstwahrscheinlich der letzte Ort, an dem das GPS an war, der irgendwo sein könnte (d. H. Es könnte Meilen von dem aktuellen Standort des Benutzers entfernt sein). Also warte ich einfach auf requestLocationUpdates
Rückrufe, und wenn sie nicht innerhalb von zwei Minuten da sind, entfernen Sie den Hörer und geben Sie auf, oder?
Falsch, weil, wenn der Standort des Benutzers bereits stabil ist (d. H. Er hat kürzlich GPS verwendet und sich nicht bewegt hat), wird mein Listener nie aufgerufen, da sich die Position nicht ändert. Aber das GPS wird laufen, bis mein Hörer entfernt wird, die Batterie entleerend ...
Was ist der rechte Weg, um den gegenwärtigen Standort zu erhalten, ohne einen alten Standort für den gegenwärtigen Standort zu verwechseln? Es macht mir nichts aus, ein paar Minuten zu warten.
EDIT: Es ist möglich, dass ich falsch liege, wenn der Hörer nicht angerufen wird, es kann nur ein wenig länger dauern, als ich dachte ... Schwer zu sagen. Ich würde eine endgültige Antwort noch schätzen.
Können Sie einen Beispielcode bereitstellen? Wie würden Sie beispielsweise 2 Minuten oder so warten, wenn der Standort-Listener nicht aufgerufen wird? – noah
Code-Snippet hinzugefügt – Fedor