【发布时间】: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://stackoverflow.com/a/26298509/1131904;我还找到了这篇文章,它解决了如何以省电的方式安排周期性任务的类似问题:https://wangjingke.com/2016/09/23/Multiple-ways-to-schedule-repeated-tasks-in-android
有没有其他人遇到过类似的问题?使用 AlarmManager 是个好方法吗?
【问题讨论】:
标签: android google-play-services fusedlocationproviderapi google-location-services