Я использую ReactiveLocation
library. В принципе, я хочу получить место в течение 4 секунд с достаточной точностью. Если в это время не было получено достаточной точности, но в других местах затем вернется место с наивысшей точностью.Настройка переменной изнутри RxJava Chain
Как только будет получено место с достаточной точностью, оно возвращается и наблюдаемое завершено.
Я отправлю код того, что я пытаюсь. Я мог бы быть, и, вероятно, я ошибаюсь.
LocationRequest request = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setFastestInterval(FASTEST_UPDATE_INTERVAL)
.setSmallestDisplacement(MIN_DISTANCE_UPDATE_INTERVAL);
if (expirationSeconds != null)
request.setExpirationDuration(TimeUnit.SECONDS.toMillis(expirationSeconds));
ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
Observable<Location> observable = locationProvider.getUpdatedLocation(request)
.doOnNext(new Action1<Location>() {
@Override
public void call(Location location) {
if (mostAccurateLocation == null)
mostAccurateLocation = location;
if (location.getAccuracy() < mostAccurateLocation.getAccuracy())
mostAccurateLocation = location;
}
})
.filter(new Func1<Location, Boolean>() {
@Override
public Boolean call(Location location) {
return location.getAccuracy() < sufficientAccuracy ;
}
});
if (expirationSeconds != null)
observable = observable.timeout(expirationSeconds, TimeUnit.SECONDS, Observable.just(mostAccurateLocation), backgroundThread);
return observable.firstOrDefault(mostAccurateLocation)
.doOnNext(new Action1<Location>() {
@Override
public void call(Location location) {
lastLocation = location;
}
});