使用FusedLocationProviderApi相比于LocationManager有哪些优势?

16

之前为了获取用户当前位置,我使用了LocationManager:

LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

} else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}

很容易阅读且非常直接的代码。 但是我注意到 Google 最近发布了 Google Play 服务中的新客户端 API 模型,并建议使用 FusedLocationProviderApi,这看起来更加复杂,它是异步的,需要处理回调等。 使用 FusedLocationProviderApi 是否有任何优势比 LocationManager 更好?

它在GPS和WiFi基础定位之间切换,提供更准确的定位并且能降低电量消耗。为了避免繁琐的操作,我建议使用这个库:https://github.com/mcharmas/Android-ReactiveLocation - cYrixmorten
3个回答

16

FusedLocationProvider使用混合硬件来根据请求的上下文确定位置,这意味着它会自动优化,无需您进行任何设置。它还会在应用之间缓存已捕获的位置信息,以避免重复决定位置信息而增加设备负担(和等待时间)。因此,如果用户有多个位置感知的应用程序,则它们可能避免额外的设备负担和等待,因为其中一个可能已经被缓存。

虽然旧版的LocationManager在小型单次情况下可以胜任,但您应该考虑采用更新的替代方案,因为它的好处可能很大,而且实施起来也很容易。

由于Google Play服务在各种设备上定期更新,并持续包含改进的基于位置的功能(及更多其他功能),因此您也可以使用它。

关于FusedLocationProvider在发布时的说明,请参阅以下链接:https://www.youtube.com/watch?v=Bte_GHuxUGc


4

在某些情况下,FusedLocationProvider表现非常差。例如,如果你想在地图上跟踪你的路径,它可能会决定在GPS数据和Wifi数据之间切换。如果你想精确计算行驶距离,最好使用LocationManager强制获取GPS读数,特别是如果你还想跟踪高度,因为Wifi无法提供该信息。


在我的一个项目中,我需要每隔10秒捕获用户的位置。我使用了GPS和网络提供商。我的路径是河边的道路。 当我在谷歌地图上绘制捕获的纬度和经度时,它显示的纬度和经度与实际纬度和经度相差5-6米,并且落在了河里。 根据这个测试场景的最终结论是用户的路径在河上,这在现实中是错误的。 那么在我的情况下,我可以使用融合吗?目前,使用融合一切正常,但根据您的评论,我有疑虑,请给我建议。 在我的情况下,我需要正确的纬度和经度。 - Gevaria Purva
在我的测试中,并根据我所读的内容,如果您想准确跟踪路径,最好使用位置管理器强制GPS。如果电池寿命不是一个巨大的问题,这是最好的选择。我注意到其他高质量的应用程序,如S-Health或MapMyRun等似乎使用位置管理器,因为当我同时运行这些应用程序时,它们的轨迹看起来与我的非常相似。 - Carson Holzheimer
我也用过那个,但我的路径不准确。我花了很多时间进行测试,也尝试了不同的设备。 - Gevaria Purva
你是如何将你的坐标与现实世界进行比较的呢?请记住,Google地图或卫星图像可能没有正确对齐。 - Carson Holzheimer
好的,那么我犯了一个错误,是将我的经纬度与谷歌地图进行比较。您能告诉我如何获取实际的经纬度以进行比较吗? - Gevaria Purva
2
你可以使用谷歌地图,但要确保在移动时没有与你的真实位置存在持续偏移。 - Carson Holzheimer

0
请记住,FusedLocationProvider在底层使用LocationManager来至少获取GPS点。它可能会执行Wifi扫描并查找结果以确定位置,而不是使用网络提供程序,但我不知道有关此的任何文档。
除非您不能或不想使用FusedLocationProvider,否则我建议使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接