0
私はReactiveLocation
libraryを使用しています。基本的には、私は4秒以内に十分な精度を得たいと思っています。その時点で十分な精度の位置が受信されていないが、他の位置が最も正確な位置を返す場合は、RxJavaチェーン内から変数を設定する
十分な精度の位置が受信されるとすぐにそれが返され、観察可能なものが完成します。
私が試みているコードを投稿します。私は、おそらく、これについて間違ったやり方になる可能性があります。
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;
}
});