在 SwiftUI 中请求用户位置权限
Request User Location Permission In SwiftUI
如何在 SwiftUI 中获取用户位置权限?
我尝试在点击按钮后询问用户位置权限,但对话框在大约一秒钟后消失了。即使您最终及时点击了它,权限仍然会被拒绝。
import CoreLocation
.
.
.
Button(action: {
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
}) {
Image("button_image")
}
位置管理器之类的东西应该在您的模型中,而不是您的视图中。
然后您可以在您的模型上调用一个函数来请求位置权限。
您现在正在做的事情的问题是您的 CLLocationManager
在关闭完成后立即被释放。权限请求方法是异步执行的,因此闭包很快结束。
释放位置管理器实例后,权限对话框消失。
位置模型可能如下所示:
class LocationModel: NSObject, ObservableObject {
private let locationManager = CLLocationManager()
@Published var authorisationStatus: CLAuthorizationStatus = .notDetermined
override init() {
super.init()
self.locationManager.delegate = self
}
public func requestAuthorisation(always: Bool = false) {
if always {
self.locationManager.requestAlwaysAuthorization()
} else {
self.locationManager.requestWhenInUseAuthorization()
}
}
}
extension LocationModel: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
self.authorisationStatus = status
}
}
您可能还需要启动和停止位置更新的功能以及 @Published
CLLocation
属性
如何在 SwiftUI 中获取用户位置权限?
我尝试在点击按钮后询问用户位置权限,但对话框在大约一秒钟后消失了。即使您最终及时点击了它,权限仍然会被拒绝。
import CoreLocation
.
.
.
Button(action: {
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
}) {
Image("button_image")
}
位置管理器之类的东西应该在您的模型中,而不是您的视图中。
然后您可以在您的模型上调用一个函数来请求位置权限。
您现在正在做的事情的问题是您的 CLLocationManager
在关闭完成后立即被释放。权限请求方法是异步执行的,因此闭包很快结束。
释放位置管理器实例后,权限对话框消失。
位置模型可能如下所示:
class LocationModel: NSObject, ObservableObject {
private let locationManager = CLLocationManager()
@Published var authorisationStatus: CLAuthorizationStatus = .notDetermined
override init() {
super.init()
self.locationManager.delegate = self
}
public func requestAuthorisation(always: Bool = false) {
if always {
self.locationManager.requestAlwaysAuthorization()
} else {
self.locationManager.requestWhenInUseAuthorization()
}
}
}
extension LocationModel: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
self.authorisationStatus = status
}
}
您可能还需要启动和停止位置更新的功能以及 @Published
CLLocation
属性