从 FusedLocationProvider(Google Play 服务)获取位置不会给出低于 10 米的准确度

Posted

技术标签:

【中文标题】从 FusedLocationProvider(Google Play 服务)获取位置不会给出低于 10 米的准确度【英文标题】:Getting the location from FusedLocationProvider (Google Play Services) doesn’t give accuracy below 10 meters 【发布时间】:2018-10-13 21:10:42 【问题描述】:

我们正在使用 Google Play 服务获取位置更新:

LocationRequest mLocationRequestHighAccuracy = LocationRequest.create() 
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setFastestInterval(500)
                .setInterval(500);

FusedLocationProviderClient locationProviderClient = LocationServices.getFusedLocationProviderClient(context);

Task<Void> task = locationProviderClient.requestLocationUpdates(getLocationRequestHighAccuracy(context), getActivityDetectionPendingIntent(context));

task.addOnSuccessListener(new OnSuccessListener<Void>() <snip>

由于某种原因,大多数时候,我们只能获得 10m 的精度。

但是,如果我们在 android.location 中注册到 LocationManager,我们会得到 4m 甚至 3m 的精度。代码sn-p:

android.location.LocationManager locationManager = (android.location.LocationManager) 
appContext.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(android.location.LocationManager.GPS_PROVIDER, 500, 0, mLocationListener);

我们希望使用 Google Play 服务更快的修复时间,以及与更多传感器的融合,但我们需要最准确的结果。我不明白融合位置提供者提供的结果如何不如 gps 提供者准确。

有谁知道如何强制 Google Play 服务为我们提供更准确的结果?到目前为止,我们唯一的解决方案是注册两者,从 Google Play 服务获取纬度/经度,从原始 GPS 获取准确度(如果它更低的话)。但这似乎是一个 hack……

谢谢。

【问题讨论】:

Why does FusedLocationProviderApi never report accuracy better than 10m? Is this documented?的可能重复 【参考方案1】:

如果您想要最准确的结果,请使用 GPS。 Fused 位置的想法是您在牺牲准确性以换取更快的定位时间、更少的电池使用等。如果这不是您所需要的,只需使用 GPS。你不能一边吃蛋糕一边吃。

至于它如何提供比 GPS 更低的准确性 - 它更多地依赖网络位置而不是 GPS 数据来节省电池。唯一比 GPS 更准确的是短程信号三角测量,为此您需要无处不在的蓝牙信标和准确的地图。手机配备 GPS 硬件是有原因的——因为它是在极少数情况下获取位置的最准确方法。如果 Fused 更准确​​,他们会删除它并节省硬件成本。

【讨论】:

不,这是一个错误。有很多关于它的问题,并且已在问题跟踪器上报告。 issuetracker.google.com/issues/79189573。而且,根据文档,将 FusedProvider 设置为 PRIORITY_HIGH_ACCURACY 可以使用 GPS。 "请求的优先级是对LocationClient使用哪个位置源的强烈提示。例如,PRIORITY_HIGH_ACCURACY更可能使用GPS,PRIORITY_BALANCED_POWER_ACCURACY更可能使用WIFI & Cell tower定位,但它也取决于许多其他因素(例如可用的资源)并且取决于实现。” @paul 应该,不会。如果您需要高精度,请不要依赖应该——只使用 GPS。一个应用程序是否真的需要这种准确性总是一个很好的问题,但如果你这样做了,你就不应该使用 fused。 我认为这不准确。它是真的,它不是保证。实际上 GPS 提供商也不是,因为用户可以禁用 GPS。但 Fused 与 GPS 和 Network 不同。它是两者+传感器的组合。根据我在此错误之前的经验,融合通常比单独使用 GPS 更准确(我假设是因为谷歌正在处理传感器数据)。如果您只使用 GPS 提供商,即使在户外,您也可能会在桌子上留下一些准确性。使用 GPS 作为后备是有道理的,但我不同意从准确性的角度排除 Fused。 @paul 确实它不是一个 garuntee。你让 FusedProvider 选择。用户关闭 GPS 是一个完全不同的问题——如果他们关闭 GPS,那么 GPS 提供商会告诉您它已禁用,您可以选择使用不太准确的方法,或者告诉用户启用它。 (就此而言,他们可以关闭所有位置,包括 Fused)。 Fused 从来没有比 GPS 更准确,它可以和 GPS 一样准确——如果它决定只使用 GPS。但你不会得到比最准确的信号更准确的信号。

以上是关于从 FusedLocationProvider(Google Play 服务)获取位置不会给出低于 10 米的准确度的主要内容,如果未能解决你的问题,请参考以下文章

FusedLocationProvider - 如果位置模式为“仅设备”,任何获取位置的方法?

FusedLocationProvider 始终返回 null Location 对象

FusedLocationProvider 有时会给出错误的位置

FusedLocationProvider 位置更新的单独类或服务?

无法使用 FusedLocationProvider 将 Gps 设置升级到高精度在某些设备中

Android:FusedLocationProvider,每隔几秒获取一次位置