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 Services 中发布了新的客户端 API 模型,并建议使用FusedLocationProviderApi,它看起来要复杂得多,它是异步的,它需要处理回调等。

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

4

3 回答 3

16

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

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

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

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

于 2015-05-09T20:51:00.630 回答
3

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

于 2015-10-10T13:17:33.090 回答
0

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

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

于 2017-06-29T21:36:47.413 回答