- (void)initCLLocationManager
{
//定位服务是否可用
BOOL enable=[CLLocationManager locationServicesEnabled];
//是否具有定位权限
int status=[CLLocationManager authorizationStatus];
if(!enable || status<3)
{
//请求权限
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8)
{
//由于IOS8中定位的授权机制改变 需要进行手动授权
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
//获取授权认证
[locationManager requestAlwaysAuthorization];
[locationManager requestWhenInUseAuthorization];
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
message:@"无法定位到您所在的城市,请前去开启GPS定位"
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"取消",@"去设置", nil];
alertView.tag = 1000;
[alertView show];
}
}
#pragma mark -- UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
else
{
[self jumpSetting];
}
}
- (void)jumpSetting
{
//打开设置页面,去设置定位
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
[[UIApplication sharedApplication] openURL:url];
}
}
当去设置页面去设置允许获取定位功能时,奔溃问题修改
info.plist中, NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述 NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
这两个必须是String类型,不能是BOOL 修改后需要卸载重装app
跳转到设置页面去 |
typedef NS_ENUM(int, CLAuthorizationStatus) { // 用户从未选择过权限 kCLAuthorizationStatusNotDetermined = 0, // 无法使用定位服务,该状态用户无法改变 kCLAuthorizationStatusRestricted, // 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态 kCLAuthorizationStatusDenied, // 这个值已弃用 kCLAuthorizationStatusAuthorized // 大致是用户允许该程序无论何时都可以使用地理信息 kCLAuthorizationStatusAuthorizedAlways // 大致是用户同意程序在可见时使用地理位置 kCLAuthorizationStatusAuthorizedWhenInUse };