从 FusedLocationProvider (Google Play Services) 获取位置的精度低于 10 米

Getting the location from FusedLocationProvider (Google Play Services) doesn’t give accuracy below 10 meters

我们正在使用 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>}

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

但是,如果我们在 android.location 中注册到 LocationManager,我们将获得 4 米甚至 3 米的精度。代码片段:

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 Services 获取 lat/lon 并从原始 GPS 获取精度(如果它较低)。但这似乎是一个 hack…

谢谢。

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

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