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

Are there any advantages of using FusedLocationProviderApi over LocationManager?

早些时候获取用户当前位置我使用了 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 最近发布了 New Client API Model in Google Play Services and suggests to use FusedLocationProviderApi 看起来更复杂,它是异步的,需要处理回调等

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

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

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

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

A link 对启动时 FusedLocationProvider 的解释:https://www.youtube.com/watch?v=Bte_GHuxUGc

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

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

除非您不能或不想使用FusedLocationProvider,否则我建议您使用它。