为了获得用户当前位置,我之前使用过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有什么好处吗?
答案 0 :(得分:15)
FusedLocationProvider使用混合硬件根据请求的上下文确定位置,这意味着它对您透明地进行了优化。它还将缓存应用程序之间捕获的位置,以避免不必要的工作来确定位置信息。因此,如果用户拥有各种位置感知应用程序,他们可能会避免对设备征税(并等待)进行位置捕获,因为可能已经缓存了这些应用程序。
虽然ol'LocationManager足以满足小型,一次性的需求,但你应该考虑更新的替代方案,因为它的好处可能很大,而且实施的工作也很简单。
您也可以使用它,因为Google Play服务会定期在各种设备上进行更新,并且不断对基于位置的功能进行改进(以及更多)。
启动时对FusedLocationProvider的解释的链接:https://www.youtube.com/watch?v=Bte_GHuxUGc
答案 1 :(得分:2)
在某些情况下,FusedLocationProvider执行可怕。例如,如果要在地图上跟踪路径,可能会决定在GPS数据和Wifi数据之间切换。要计算准确的行进距离,最好使用LocationManager强制GPS读数,特别是如果您还想跟踪wifi无法提供的高度。
答案 2 :(得分:0)
请注意FusedLocationProvider
使用LocationManager
至少获得GPS积分。它可能正在执行Wifi扫描并查看结果以确定位置,而不是使用网络提供商,但我没有任何关于此的文档。
除非您不能或不想使用FusedLocationProvider
,否则我建议您使用它。