【问题标题】:Checking user location permission status on iOS 14在 iOS 14 上检查用户位置权限状态
【发布时间】:2020-12-26 12:28:17
【问题描述】:

所以我想检查我是否可以访问 iOS14 上的用户位置 & 我找到了这段代码,但 XCode(12) 用这个对我大喊:

'authorizationStatus()' was deprecated in iOS 14.0

这里是代码:

func hasLocationPermission() -> Bool {
       var hasPermission = false
       if CLLocationManager.locationServicesEnabled() {
           switch CLLocationManager.authorizationStatus() { // <= 'authorizationStatus()' was deprecated in iOS 14.0
           case .notDetermined, .restricted, .denied:
               hasPermission = false
           case .authorizedAlways, .authorizedWhenInUse:
               hasPermission = true
           @unknown default:
               hasPermission = false
             }
       } else {
            hasPermission = false
       }
        return hasPermission
}

那我应该改用什么?

【问题讨论】:

标签: swift location ios14


【解决方案1】:

在 iOS 14 中,'authorizationStatus()' 已被弃用:

https://developer.apple.com/documentation/corelocation/cllocationmanager/1423523-authorizationstatus

您应该改用 locationManagerDidChangeAuthorization:

func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {

        switch manager.authorizationStatus {
            case .authorizedAlways , .authorizedWhenInUse:
                break
            case .notDetermined , .denied , .restricted:
                break
            default:
                break
        }
        
        switch manager.accuracyAuthorization {
            case .fullAccuracy:
                break
            case .reducedAccuracy:
                break
            default:
                break
        }
}

【讨论】:

【解决方案2】:

iOS 14 及更早版本

func locationAuthorizationStatus() -> CLAuthorizationStatus {
    let locationManager = CLLocationManager()
    var locationAuthorizationStatus : CLAuthorizationStatus
    if #available(iOS 14.0, *) {
        locationAuthorizationStatus =  locationManager.authorizationStatus
    } else {
        // Fallback on earlier versions
        locationAuthorizationStatus = CLLocationManager.authorizationStatus()
    }
    return locationAuthorizationStatus
}

【讨论】:

    【解决方案3】:

    iOS 14 检查用户是否允许

    extension CLLocationManager {
        
        func checkLocationPermission() {
            
            if self.authorizationStatus != .authorizedWhenInUse && self.authorizationStatus != .authorizedAlways {
                
                self.requestAlwaysAuthorization()
                
            }
            
        }
        
    }
    

    使用

    self.LocationManager.checkLocationPermission()
    

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 2013-02-15
      • 1970-01-01
      • 2018-06-20
      • 2021-05-03
      • 2019-03-27
      • 2016-12-08
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多