RxJava获取gps和融合位置

问题描述 投票:1回答:1

我的应用程序中有两种方法来获取用户位置。两种方法均返回Observable。第一种方法通过位置管理器获取gps位置。第二种方法获得融合位置。


    @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);
    }

所以我的目标是提出这样的请求链:

  1. 请求GPS位置
  2. 如果获得Gps位置,则将其返回
  3. 如果在15秒钟内没有获得GPS位置,而取消GPS请求并开始融合位置请求,则>
  4. 在第一次请求后,如何将这两种方法与15秒计时器结合在一起?

我的应用程序中有两种方法来获取用户位置。两种方法均返回Observable。第一种方法通过位置管理器获取gps位置。第二种方法获得融合位置。 @SuppressLint(“ ...

android geolocation rx-java
1个回答
0
投票

总之,您的问题。您必须从LocationManager创建一个流,并从FusedLocationProviderClient创建一个流然后,您将执行“超时”操作。例如:

© www.soinside.com 2019 - 2024. All rights reserved.