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