【问题标题】:Are there any advantages of using FusedLocationProviderApi over LocationManager?与 LocationManager 相比,使用 FusedLocationProviderApi 有什么优势吗?
【发布时间】:2015-07-20 14:07:36
【问题描述】:

之前获取用户当前位置,我使用了 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);
}

它易于阅读且非常简单的代码。

但我注意到谷歌最近发布了New Client API Model in Google Play Services,并建议使用FusedLocationProviderApi,这看起来要复杂得多,它是异步的,它需要处理回调等。

与 LocationManager 相比,使用 FusedLocationProviderApi 有什么优势吗?

【问题讨论】:

标签: android google-play-services android-location android-maps-utils


【解决方案1】:

FusedLocationProvider 使用混合硬件来根据请求的上下文确定位置,这意味着它对您透明地进行了优化。它还将在应用程序之间缓存捕获的位置,以避免不必要的工作来确定位置信息。因此,如果用户拥有各种位置感知应用程序,他们可能会避免对设备(和等待)位置捕获征税,因为其中一个可能已经被缓存。

虽然 ol' LocationManager 在小型、一次性的情况下就足够了,但您绝对应该考虑更新的替代方案,因为它的好处可能很大,而且实施起来也很容易。

您也可以使用它,因为 Google Play 服务会跨设备定期更新,并不断改进基于位置的功能(等等)。

启动时 FusedLocationProvider 说明的链接:https://www.youtube.com/watch?v=Bte_GHuxUGc

【讨论】:

    【解决方案2】:

    在某些情况下,FusedLocationProvider 的表现非常糟糕。例如,如果您想在地图上跟踪您的路径,它可能会决定在 GPS 数据和 Wifi 数据之间切换。要计算准确的行驶距离,最好使用 LocationManager 强制 GPS 读数,特别是如果您还想跟踪高度,而 wifi 不提供。

    【讨论】:

    • 在我的一个项目中,我需要每隔 10 秒捕获一次用户的位置。我使用 GPS 和网络提供商。我的路径是靠近河流的道路。当我在谷歌地图中绘制捕获的经度时,它显示我的经度与实际经度相差 5-6 米,并且落入河中。根据这个测试场景,最终结论是用户的路径在河上,这在相关性上是错误的。所以我可以在我的情况下使用 fused 吗?现在使用 fused 一切正常,但根据您的评论,我有疑问,所以请建议我。就我而言,我需要适当的纬度。
    • 在我的测试中,根据我所阅读的内容,我认为如果您想准确跟踪路径,最好使用位置管理器强制 GPS。如果电池寿命不是一个大问题,那就最好了。我注意到 S-Health 或 MapMyRun 等其他高质量应用程序似乎使用位置管理器,因为当我与我同时运行这些应用程序时,它们的轨迹看起来与我的非常相似
    • 我也用过,但我的路径不准确。我花了很多时间进行测试,还尝试了不同的设备。
    • 您如何将您的坐标与现实世界进行比较?请记住,Google 地图或卫星可能未正确对齐
    • 您可以使用谷歌地图,但只要检查一下,当您四处走动时,与您的真实位置的偏移量并不一致。
    【解决方案3】:

    请记住,FusedLocationProvider 在幕后使用LocationManager 至少可以获取 GPS 点。它可能正在执行 Wifi 扫描并查看结果以确定位置,而不是使用网络提供商,但我知道没有任何关于此的文档。

    除非你不能或不想使用FusedLocationProvider,否则我会推荐使用它。

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2012-12-09
      • 2010-09-24
      • 2010-12-27
      • 2015-04-06
      • 2013-05-09
      • 2017-05-29
      • 2017-11-24
      • 1970-01-01
      相关资源
      最近更新 更多