Ich möchte Standortaktualisierungen für eine bestimmte Zeitdauer sammeln und etwas mit den Standorten am Ende tun. Ich verfolge derzeit die Zeit, die in der Methode onLocationChanged
verstrichen ist.So sammeln Sie Standortaktualisierungen für die spätere Verarbeitung außerhalb von onLocationChanged
Allerdings möchte ich diese Logik scheiden, weil ich verschiedene Dinge mit den Standorten je nach meinen Bedürfnissen tun möchte. Ich überlegte, dass ich, wenn ich einen neuen Thread für die Registrierung meines Standort-Listeners erstellte, auf den Haupt-Thread warten könnte, bis die Standort-Sammlung fertig ist, um die locations
-Liste zu verwenden.
public class LocationUpdates {
private LocationProvider mLocationProvider;
private Looper mLooper;
public List<Location> gatherUpdates(final Context context,
final long interval,
final long fastInterval,
final long duration)
throws InterruptedException {
long startTime = System.currentTimeMillis();
new Thread() {
@Override
public void run() {
Looper.prepare();
mLooper = Looper.myLooper();
mLocationProvider = new LocationProvider(context);
mLocationProvider.startTracking(interval, fastInterval, duration);
Looper.loop();
}
}.start();
while (System.currentTimeMillis() - startTime < duration) {
}
mLooper.quit();
mLooper.getThread().join();
return mLocationProvider.locations;
}
}
Statt dessen, was ich beobachtet (Intervall von 3 Sekunden Dauer 10 Sekunden):
- die Linie
mLocationProvider.startTracking(interval, fastInterval, duration);
erreicht ist gatherUpdates
kehrt nach wie langeonLocationChanged
wird für die angerufene erste Zeit nur jetzt
Also, e Obwohl der Standort-Listener registriert ist, blockiert etwas den Empfang von Updates. Ich kann nicht herausfinden, warum meine Logik nicht das tut, was ich von ihr erwarte.
Gibt es einen Weg, auch ohne einen Thread, um eine Reihe von Standort-Updates zu sammeln und mit ihnen außerhalb von onLocationChanged
nur nach der Sammlung zu arbeiten?
Wenn der downvoter freundlich zeigen könnte, was in dieser Frage fehlt, könnte ich möglicherweise es ansprechen. Eine Antwort auf diese Frage interessiert mich immer noch. – Reti43