如何获得位置服务的确切授权状态?

时间:2014-12-12 04:18:32

标签: ios objective-c swift cllocationmanager

如果用户明确拒绝此应用程序的授权,或者在“设置”中禁用了位置服务,则会返回“拒绝”状态。我怎么知道它的确切原因?

3 个答案:

答案 0 :(得分:5)

我已经完成了这两个功能来检查每个案例


如果用户明确拒绝了您的应用授权,则可以像这样查看

+ (BOOL) isLocationDisableForMyAppOnly
{
    if([CLLocationManager locationServicesEnabled] &&
       [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
    {
        return YES;
    }

    return NO;
}

如果在“设置”中停用了位置服务,

+ (BOOL) userLocationAvailable {
    return [CLLocationManager locationServicesEnabled];
}

我正在使用它,

if([UserLocation userLocationAvailable]) {
    //.... Get location.
}
else
{
    if([UserLocation isLocationDisableForMyAppOnly]) {
        //... Location not available. Denied accessing location.
    }
    else{
        //... Location not available. Enable location services from settings.
    }
}

<子> P.S。 UserLocation是一个用于获取用户位置的自定义类。

答案 1 :(得分:3)

<强>夫特:

我已经完成了这两个功能来检查每个案例

如果用户明确拒绝了您的应用授权,则可以像这样查看

class func isLocationDisableForMyAppOnly() -> Bool {
    if CLLocationManager.locationServicesEnabled() && CLLocationManager.authorizationStatus() == .denied {
        return true
    }
    return false
}

如果在“设置”中停用了位置服务,

class func userLocationAvailable() -> Bool {
    return CLLocationManager.locationServicesEnabled()
}

我正在使用它,

if UserLocation.userLocationAvailable() {
        //.... Get location.
} else {
    if UserLocation.isLocationDisableForMyAppOnly() {
        //... Location not available. Denied accessing location.
    } else {
        //... Location not available. Enable location services from settings.
    }
}

<子> P.S。 UserLocation是用于获取用户位置的自定义类。

答案 2 :(得分:2)

<强>夫特

使用:

CLLocationManager.authorizationStatus()

获取授权状态。它是CLAuthorizationStatus,您可以打开不同的状态&#39;像这样:

let status = CLLocationManager.authorizationStatus()
switch status {
    case .authorizedAlways:
        <#code#>
    case .authorizedWhenInUse:
        <#code#>
    case .denied:
        <#code#>
    case .notDetermined:
        <#code#>
    case .restricted:
        <#code#>
}