融合的位置提供程序-获得更高的准确性

时间:2019-04-14 15:40:44

标签: android google-play-services fusedlocationproviderapi google-location-services

我正在尝试寻找一种方法来提高从Google Play服务的“融合的位置提供者”获得的准确性。

我正在测试一个使用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是个好方法吗?

1 个答案:

答案 0 :(得分:0)

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