IOS-CLLocationManager用法心得

CLLocationManager定位权限问题。

我们在使用CLLocationManager进行定位的时候,肯定要关心定位权限问题:用户拒绝?用户允许?还是设备根本就不支持?

所以我们在使用这个类的时候,肯定要优先判断设备是否支持CLLocationManager进行定位。

可使用+ (BOOL)locationServicesEnabled;来进行判断。返回YES则表示设备支持CLLocationManager来进行定位,否则表示不支持。

当设备支持CLLocationManager来进行定位后,我们还需要知道用户是否授权允许定位。当用户点击了“拒绝”定位,我们当如何获取到这个“拒绝”或“允许”操作呢?

通过查看CLLocationManager的delegate,我们发现了“授权回调”方法:-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;该方法在用户点击定位“允许”/“拒绝”的时候调用。

查看“CLAuthorizationStatus(定位授权状态)”的枚举,发现有这么几个状态。

IOS-CLLocationManager用法心得_第1张图片

kCLAuthorizationStatusNotDetermined = 0  用户“未决定”

kCLAuthorizationStatusRestricted                其他原因“无法授权定位”

kCLAuthorizationStatusDenied                     用户“拒绝”

kCLAuthorizationStatusAuthorizedAlways    用户允许“一直定位”

kCLAuthorizationStatusAuthorizedWhenInUse          用户允许“使用时定位”

kCLAuthorizationStatusAuthorized               用户“允许定位”

能获取到这些状态值,那么定位权限问题,基本已经解决了。

进一步测试发现,“授权回调”方法,会在CLLocationManager“开始定位”的时候也会执行,得到“用户允许”或者“用户拒绝”。总而言之,“授权回调”方法总能返回定位授权的结果,从而进一步优化CLLocationManager的使用。

本人在使用CLLocationManager的时候,是通过单例来处理的。


代码如下:


IOS-CLLocationManager用法心得_第2张图片
IOS-CLLocationManager用法心得_第3张图片
IOS-CLLocationManager用法心得_第4张图片
IOS-CLLocationManager用法心得_第5张图片
IOS-CLLocationManager用法心得_第6张图片


你可能感兴趣的:(IOS-CLLocationManager用法心得)