iOS开发笔记之五十五——关于LocationManager那点事

定位服务CLLocationManager是很多APP常用的,之前有做过点评和美团App的定位逻辑梳理,总结了几点随手笔记。

1、CLLocationManager是苹果GPS定位的系统方法,它的大致原理是依赖手机上安装的GPS接收器,美国发射了多个绕地球运行的卫星,使用GPS接收器可以轻松找到自己的位置。然而,由于GPS信号对外界环境也有依赖,因此在室内或其他卫星无法穿透的地方(例如穿山隧道、地铁等)可能不起作用,如果用户坐在飞机上或者开启飞行模式,都无法接收GPS信息。甚至在糟糕的天气也会出现较高概率的- (void)locationManager:didFailWithError:回调。

2、在实际开发中,如果LocationManager回调提供的经纬度不能满足你对位置信息的要求,往往还需要境经过调接口将经纬度转化为详细的城市或位置等信息(如果你对位置信息要求不是很高,你也可以在App本地写个类似地理围栏的东西)。当然,我相信你不会直接把你的接口调用写在- (void)locationManager:didUpdateToLocation:fromLocation:回调里去的。

3、从苹果的官方文档中,我们应该能隐约嗅到CLLocationManager是一个比较“耗电”家伙,所以如果你没有location-updates的需求,建议你及时去做stopUpdatingLocation()操作。如果你有location-updates的需求,建议你按需设置desiredAccuracy和distanceFilter的值,当然精度越高,越耗电。也可以使用苹果推荐的带有时延的allowDeferredLocationUpdates方法。

4、如果你想要实时获取用户上报的经纬度,哪怕App已经被切到后台或者被kill掉,请设置Xcode->Capabilites->Background Modes->勾选Location updates。当然,对于苹果这种注重用户隐私的公司,肯定不会轻易让你去这么

"随意"获取用户的实时位置的,所以这一步第一次设置时会被苹果严格审核的。

5、CLLocationManager并不是获取位置信息的唯一途径,苹果文档也指出,wifi或者cell radios等,另外如果在国外wifi(ip定位)获取的位置信息往往不是很准的。

6、定位信息的获取往往会很慢,或者一直fail,所以与App的UI应该是异步操作。即使定位数据能够顺利拿到,请记住,它也并不一定可靠。



猜你喜欢

转载自blog.csdn.net/lizitao/article/details/53728057