Zacząłem uczyć się programowania reaktywnego w tych dniach. W mojej aplikacji skorzystałem z polecenia rxandroid dla wielu przypadków, które przetwarzają dane asynchronicznie. Ale nie wiem, jak zastosować do odbiornika lokalizacji. Czy istnieje sposób na subskrypcję zmiany lokalizacji użytkownika? Proszę, daj mi pomysł.Jak używać rxandroid do słuchania aktualizacji lokalizacji GPS
5
A
Odpowiedz
8
Możesz utworzyć obserwowalne lub Temat za pomocą LocationListener
i podczas odbierania wywołania zwrotnego w onLocationChanged
, po prostu wywołajNastępny z obiektem lokalizacji.
public final class LocationProvider implements onLocationChanged {
private final PublishSubject<Location> latestLocation = PublishSubject.create();
//...
@Override
public void onLocationChanged(Location location) {
latestLocation.onNext(location);
}
}
Następnie możesz zapisać się do niego w klasie, która potrzebuje lokalizacji.
Istnieje również kilka bibliotek open source, które można użyć: Android-ReactiveLocation i cgeo
również zobaczyć Observable-based API and unsubscribe issue
nadzieję, że to pomaga!
0
Co powiesz na używanie tej niesamowitej biblioteki? https://github.com/patloew/RxLocation
dodać do build.gradle
compile 'com.patloew.rxlocation:rxlocation:1.0.4'
można użyć tego fragmentu z powyższej biblioteki, aby zapisać się na zmiany lokalizacji, wierzę, że to najprostszy sposób
// Create one instance and share it
RxLocation rxLocation = new RxLocation(context);
LocationRequest locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(5000);
rxLocation.location().updates(locationRequest)
.flatMap(location -> rxLocation.geocoding().fromLocation(location).toObservable())
.subscribe(address -> {
/* do something */
});