2015-12-19 8 views

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