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 文件?
在文件中添加这两个条目,并在值字段中添加您自己的解释,然后它应该会在模拟器中弹出:
- 隐私 - 位置始终和使用时使用说明
- 隐私 - 使用时的位置使用说明
我如何使用 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 文件?
在文件中添加这两个条目,并在值字段中添加您自己的解释,然后它应该会在模拟器中弹出:
- 隐私 - 位置始终和使用时使用说明
- 隐私 - 使用时的位置使用说明