Android GPS以不同的精度返回相同的位置坐标

时间:2018-03-23 11:28:39

标签: android gps rx-java reactive-programming android-location

我的应用使用ReactiveLocationProvider使用LocationRequest对象获取位置信息。这是完整的代码:

mLocationRequestPassive = LocationRequest.create();
mLocationRequestPassive.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);     
mLocationRequestPassive.setFastestInterval(60000);     
mLocationRequestPassive.setInterval(PASSIVE_UPDATE_PERIOD_IN_SECONDS * 1000);
mSubscriptions.add(mReactiveLocationProviderPassive
                           .getUpdatedLocation(mLocationRequestPassive)
                           .observeOn(AndroidSchedulers.mainThread())
                           .subscribe(this::onLocationChanged,
                                      throwable -> Timber.w(throwable,
                                                   "Location request error")));

几乎95%的时间都有效,但有时会开始重复发送lat / lng。但是,准确性是不同的。它曾经发生在其他人身上吗?有没有解决这个问题。

我正在使用以下版本的库

  • compile 'pl.charmas.android:android-reactive-location:0.9@aar'
  • compile 'com.google.android.gms:play-services-location:11.0.4'

更新

在此期间车辆正在移动。因此,添加setSmallestDisplacement只是将其从具有相同lat / lng的位置更新更改为无位置更新。

1 个答案:

答案 0 :(得分:1)

我不知道为什么会在服务中发生这种情况,但通常情况下,您可以使用distinctUntilChanged(BiPredicate)来过滤后续项目中的小变化:

Observable.just(10.0, 10.1, 10.15, 10.162, 11.0)
.distinctUntilChanged((prev, curr) -> Math.abs(prev - curr) < 0.09)
.subscribe(System.out::println);