Я сделал приложение социального отчета с геотегами, чтобы сообщать о разбитых улицах на Android. Для публикации отчета требуются данные о местоположении. Либо из Exif фотографии, датчика GPS, либо установите его вручную из MapsPickerActivity.
Мне удалось сделать запрос местоположения, используя библиотеку RxLocation. Есть кнопка, которая активируется, когда приложение все еще получает данные о местоположении от GPS. Поскольку получение данных о местоположении от GPS может занять некоторое время, я позволил пользователю одновременно установить местоположение вручную. Я хочу остановить getGpsLocationObservable, если пользователь нажал кнопку. Если я не остановлю getGpsLocationObservable, я боюсь, что процесс все еще будет работать и начнется после установки пользовательского местоположения. Это будет раздражать. Как я мог этого добиться?
Вот фрагменты упрощенного кода
Основные одноразовые:
Disposable myDisposable = imageProcessingObservable()
.compose(getExifLocationTransformer()) //custom location button enabled here
.filter(isLocationSet -> isLocationSet)
.flatmap(x->getGpsLocationObservable());
RxLocation getGpsLocationObservable:
private Observable<String> getGpsLocationObservable(){
locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setNumUpdates(1)
.setInterval(3000);
rxLocation = new RxLocation(PostActivity.this);
rxLocation.setDefaultTimeout(10, TimeUnit.SECONDS);
return rxLocation.settings()
.checkAndHandleResolution(locationRequest)
.flatMapObservable(isActivated->{
if (isActivated) {
return locationSettingsActivatedObservable();
}
else locationNotFoundObservable();
});
}
@SuppressLint("MissingPermission")
private Observable<String> locationSettingsActivatedObservable(){
return rxLocation.location().updates(locationRequest)
.map(location -> {
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
String street = getStreetName(latLng);
return street;
})
.doOnNext(street->{
updateUI(street);
});
}
takeUntil
и используйте событие нажатия кнопки в качестве источника для него. - person akarnokd   schedule 22.12.2017