У меня есть два метода в моем приложении, чтобы получить местоположение пользователя.Оба метода возвращают Observable.Первый способ получает GPS-местоположение через Location Manager.Второй метод получает Fused Location.
@SuppressLint("MissingPermission")
public Observable<Location> getRxGpsLocation(boolean single)
{
PublishSubject<Location> subject = PublishSubject.create();
LocationManager locationManager = (LocationManager) activity.getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000,
5, new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
subject.onNext(location);
if (single)
{
locationManager.removeUpdates(this);
subject.onComplete();
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onProviderDisabled(String provider)
{
Log.e(TAG, "onProviderDisabled: Disableeedd");
if (single)
{
locationManager.removeUpdates(this);
}
subject.onError(new Throwable("Error nit found Location"));
}
});
return subject;
}
//I use this library to get Fused Location https://github.com/patloew/RxLocation
@SuppressLint("MissingPermission")
public Observable<Location> getRxFusedLocation()
{
RxLocation rxLocation = new RxLocation(AppClass.getApp());
LocationRequest locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setNumUpdates(1)
.setInterval(1000);
return rxLocation.location().updates(locationRequest);
}
Таким образом, моя цель состоит в том, чтобы сделать эту цепочку запросов:
- Запрос местоположения GPS
- Если получил местоположение GPS,чем вернуть
- Если в течение 15 секунд не удалось получить местоположение GPS, отмените запрос GPS и запустите объединенный запрос местоположения
Как я могу объединить эти два метода в одном с таймером 15 с после первогопросить?