1. @SuppressLint("MissingPermission")
  2.     public static Single<Location> getCurrentLocation() {
  3.         RxLocation rxLocation = BaseApplication.getBaseApplication().getRxLocation();
  4.         LocationRequest locationRequest = LocationRequest.create()
  5.                 .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
  6.                 .setInterval(5000);
  7.         return rxLocation.settings().checkAndHandleResolution(locationRequest).flatMap(aBoolean -> getLastLocation().flatMap(location -> {
  8.             if (location != null) {
  9.                 return Single.just(location);
  10.             }
  11.             return Single.fromObservable(rxLocation.location().updates(locationRequest).take(1));
  12.         }));
  13.     }
  14.  
  15.     @SuppressLint("MissingPermission")
  16.     public static Single<Location> getLastLocation() {
  17.         return Single.create(emitter -> {
  18.             RxLocation rxLocation = BaseApplication.getBaseApplication().getRxLocation();
  19.             rxLocation.location().lastLocation().subscribe(new MaybeObserver<Location>() {
  20.                 @Override
  21.                 public void onSubscribe(Disposable d) {
  22.                     //No action
  23.                 }
  24.  
  25.                 @Override
  26.                 public void onSuccess(Location location) {
  27.                     emitter.onSuccess(location);
  28.                 }
  29.  
  30.                 @Override
  31.                 public void onError(throwable e) {
  32.                     emitter.tryOnError(e);
  33.                 }
  34.  
  35.                 @Override
  36.                 public void onComplete() {
  37.                     emitter.onSuccess(null);
  38.                 }
  39.             });
  40.         });
  41.     }