IOS8定位无效问题

  个人一个程序,之前都好用的,包括ios6,ios7,可是手机升级到iOS8后,xcode6编译运行,就不能正常工做了,也不报错。现象是进到设置里隐私-定位服务下面找到这个应用,设为老是容许,就能够正常获取地理信息,可是再从新编译运行,它又会变成这个未知状态。ios

  琢磨后想起来之前重装应用再调用定位服务时会弹出受权对话框,可是IOS8怎么没弹呢,因而加入调用locationManager requestAlwaysAuthorization手动申请受权,而后你能够在didChangeAuthorizationStatus这个回调里面监测是否能够具备定位权限。可是有几点要注意当你调用这个request的时候,它弹出的对话框里面的那句询问语,须要咱们本身指定。因此须要在info.plist里面添加一个key: NSLocationAlwaysUsageDescription,value就是对话框上想要询问的语句。这时候程序才能正确的弹出受权对话框,用户选了赞成之后,定位代码就正确的运行。xcode

        _instance.locationManager = [[CLLocationManager alloc] init];//建立位置管理器
        _instance.locationManager.delegate=_instance;
        _instance.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
        _instance.locationManager.distanceFilter=100.0f;
        _instance.updating=NO;
        //定位服务是否可用
        BOOL enable=[CLLocationManager locationServicesEnabled];
        //是否具备定位权限
        int status=[CLLocationManager authorizationStatus];
        if(!enable || status<3){
            //请求权限
            [_instance.locationManager requestWhenInUseAuthorization];
        }

在看看authorizationStatus的枚举吧spa

typedef NS_ENUM(int, CLAuthorizationStatus) {
    // 用户从未选择过权限
    kCLAuthorizationStatusNotDetermined = 0,
    // 没法使用定位服务,该状态用户没法改变
    kCLAuthorizationStatusRestricted,
    // 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
    kCLAuthorizationStatusDenied,
    // 这个值已弃用
    kCLAuthorizationStatusAuthorized // 大体是用户容许该程序不管什么时候均可以使用地理信息
    kCLAuthorizationStatusAuthorizedAlways // 大体是用户赞成程序在可见时使用地理位置
    kCLAuthorizationStatusAuthorizedWhenInUse 
};

  也就是[CLLocationManager authorizationStatus]返回大于等于3时才是可使用定位服务的。code

  总结一下这个问题就是在之前的IOS版本中当开始使用定位服务时会自动弹出询问受权的对话框,而如今IOS8须要手动调用locationManager requestAlwaysAuthorization手动申请受权,来获取定位权限。blog

相关文章
相关标签/搜索