之前,为了获取用户当前位置,我使用了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服务中的新客户端API模型,并建议使用看起来复杂得多的FusedLocationProviderApi,它是异步的,需要处理回调等等。
与LocationManager相比,使用LocationManager有什么优势吗?
发布于 2015-05-09 20:51:00
FusedLocationProvider使用混合硬件根据请求的上下文确定位置,这意味着它对您来说是优化的。它还将缓存应用程序之间捕获的位置,以避免不必要的工作来确定位置信息。因此,如果用户有各种各样的位置感知应用程序,他们可能会避免对设备征税(并等待)位置捕获,因为用户可能已经缓存了位置捕获。
虽然ol‘LocationManager在小的一次性情况下就足够了,但是您肯定应该考虑更新的替代方案,因为好处可能很大,而且易于实现。
你可以使用它,就像Google服务在不同设备上定期更新一样,并且不断地包括对基于位置的功能的改进(以及更多)。
发布时对FusedLocationProvider的解释的链接:GHuxUGc
发布于 2015-10-10 13:17:33
在某些情况下,FusedLocationProvider执行得很糟糕。例如,如果您想在地图上跟踪您的路径,它可能决定在GPS数据和Wifi数据之间切换。要计算出准确的行程距离,最好是使用LocationManager来强制进行GPS读数,特别是如果您还想跟踪无线网络所不提供的高度的话。
发布于 2017-06-29 21:36:47
请记住,FusedLocationProvider使用LocationManager作为掩护,至少可以获得GPS点。它可能正在执行Wifi扫描,并对结果进行查找以确定位置,而不是使用Network,但我不知道这方面的任何文档。
除非您不能或不想使用FusedLocationProvider,否则我建议您使用它。
https://stackoverflow.com/questions/30144480
复制相似问题