iOS14 如何一键查看位置授权状态?

How to check location authorization status at the click of a button in iOS 14?

我如何使用 Core Location 的 locationManagerDidChangeAuthorization(_:) 方法检查授权状态并通过按下按钮(在@IBAction 中调用)报告用户位置:

我的问题是,当我 运行 模拟器中的代码时,按下按钮时 CoreLocation 不会弹出警告请求用户许可。

class CurrentLocationViewController: UIViewController, CLLocationManagerDelegate {
    
    let locationManager = CLLocationManager()
    
    // Button to check authorization status and start sending location update to the delegate
    @IBAction func getLocation() {
        locationManagerDidChangeAuthorization(locationManager)
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.startUpdatingLocation()
    }

    // Delegate method to check authorization status and request "When In Use" authorization
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        let authStatus = manager.authorizationStatus
        if authStatus == .notDetermined {
            locationManager.requestWhenInUseAuthorization()
            return
        }
    }

编辑:在@IBAction 方法中使用已弃用的 authorizationStatus() class 方法而不是 locationManagerDidChangeAuthorization(_:) 方法允许我在模拟器中按下按钮时弹出。我仍在尝试弄清楚为什么此修改有效,而我上面的代码却无效。

    @IBAction func getLocation() {
        let authStatus = CLLocationManager.authorizationStatus()
        if authStatus == .notDetermined {
            locationManager.requestWhenInUseAuthorization()
            return
        }
        ...

您的代码有效 - 但您是否记得将隐私使用说明添加到 info.plist 文件?

在文件中添加这两个条目,并在值字段中添加您自己的解释,然后它应该会在模拟器中弹出:

  • 隐私 - 位置始终和使用时使用说明
  • 隐私 - 使用时的位置使用说明