IOS-CLLocationManager用法心得
CLLocationManager定位权限问题。
我们在使用CLLocationManager进行定位的时候,肯定要关心定位权限问题:用户拒绝?用户允许?还是设备根本就不支持?
所以我们在使用这个类的时候,肯定要优先判断设备是否支持CLLocationManager进行定位。
可使用+ (BOOL)locationServicesEnabled;来进行判断。返回YES则表示设备支持CLLocationManager来进行定位,否则表示不支持。
当设备支持CLLocationManager来进行定位后,我们还需要知道用户是否授权允许定位。当用户点击了“拒绝”定位,我们当如何获取到这个“拒绝”或“允许”操作呢?
通过查看CLLocationManager的delegate,我们发现了“授权回调”方法:-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;该方法在用户点击定位“允许”/“拒绝”的时候调用。
查看“CLAuthorizationStatus(定位授权状态)”的枚举,发现有这么几个状态。

kCLAuthorizationStatusNotDetermined = 0 用户“未决定”
kCLAuthorizationStatusRestricted 其他原因“无法授权定位”
kCLAuthorizationStatusDenied 用户“拒绝”
kCLAuthorizationStatusAuthorizedAlways 用户允许“一直定位”
kCLAuthorizationStatusAuthorizedWhenInUse 用户允许“使用时定位”
kCLAuthorizationStatusAuthorized 用户“允许定位”
能获取到这些状态值,那么定位权限问题,基本已经解决了。
进一步测试发现,“授权回调”方法,会在CLLocationManager“开始定位”的时候也会执行,得到“用户允许”或者“用户拒绝”。总而言之,“授权回调”方法总能返回定位授权的结果,从而进一步优化CLLocationManager的使用。
本人在使用CLLocationManager的时候,是通过单例来处理的。
代码如下:




