Fused Location Provider - 获得高精度

Posted

技术标签:

【中文标题】Fused Location Provider - 获得高精度【英文标题】:Fused Location Provider - getting high accuracy 【发布时间】:2019-09-04 17:19:22 【问题描述】:

我正在尝试寻找一种方法来提高从 Google Play 服务的 Fused Location Provider 获得的准确性。

我正在测试一个使用 LocationServices 并允许用户从一组更新频率(每 30 秒、每分钟、每 5 分钟、每 10 分钟)中进行选择的应用。然后,它以所选间隔向融合位置提供者请求位置更新,优先级为 PRIORITY_HIGH_ACCURACY。

它可以工作,但获得的位置似乎并不准确。精度值通常超过 10 米,而如果我等待足够长的时间,第三方 GPS 应用程序(例如 GPS 测试)通常会达到更好的精度。

android documentation 有以下说法:

PRIORITY_HIGH_ACCURACY 的优先级与您在应用清单中定义的 ACCESS_FINE_LOCATION 权限设置以及 5000 毫秒(5 秒)的快速更新间隔相结合,使融合的位置提供程序返回准确的位置更新几英尺之内。这种方法适用于实时显示位置的地图应用。

确实,当我选择一个非常小的频率(例如 5 秒或 2 秒)时,我注意到所获得位置的准确性总体上有所提高 - 它们有时会达到 3-4 米。但是,似乎选择较大的更新间隔会导致准确性较低。

所以我正在考虑以下策略:安排一个任务,按照用户选择的时间间隔:(1)每隔几秒(2 秒)开始请求位置更新,(2)等待 20 秒,然后(3) 停止请求更新。

我尝试在前台服务中使用 Handler 来完成此操作。它在屏幕打开时工作,但是,一旦屏幕关闭,调度似乎变得不可预测。所以看起来我不得不求助于像 AlarmManager 这样的东西来安排这个任务。这个答案提出了类似的方法:https://***.com/a/26298509/1131904;我还找到了这篇文章,它解决了如何以省电的方式安排周期性任务的类似问题:https://wangjingke.com/2016/09/23/Multiple-ways-to-schedule-repeated-tasks-in-android

有没有其他人遇到过类似的问题?使用 AlarmManager 是个好方法吗?

【问题讨论】:

【参考方案1】:

为了回答你的第一个问题,我们做了一些观察。一般来说,高精度位置(3-10 m)的出现随着间隔的增加而减少。但是,供应商之间的确切行为似乎有所不同。在三星 S9 和 S8 上,阈值似乎是 10 秒。在这个区间之上,高精度位置非常罕见。在其他设备(Pixel 3a、小米米 8、一加 6T)上,高精度位置仍然以 30 秒的间隔频繁出现。所有观测都是在开阔的天空下进行的。

【讨论】:

以上是关于Fused Location Provider - 获得高精度的主要内容,如果未能解决你的问题,请参考以下文章

Fused Location Provider 是不错的选择吗?

使用 Location Manager 和 Fused Location Provider Api 获取位置有啥区别?

Fused Location Provider - 获得高精度

使 Fused Location Provider LocationClient 更易于使用

从 Fused Location Provider 获取 GPS 或网络提供商

如何在 Service 类中使用 Fused Location Provider?