Để xin phép các dịch vụ vị trí bạn sử dụng:
yourSharedLocationManager.requestWhenInUseAuthorization()
Nếu trạng thái hiện chưa được xác định, một cảnh báo sẽ hiển thị nhắc người dùng cho phép truy cập. Nếu quyền truy cập bị từ chối, ứng dụng của bạn sẽ được thông báo trong CLLocationManagerDelegate, tương tự như vậy nếu quyền bị từ chối vào bất kỳ thời điểm nào, bạn sẽ được cập nhật tại đây.
Có hai trạng thái riêng biệt bạn cần kiểm tra để xác định các quyền hiện tại.
- Nếu người dùng có bật các dịch vụ vị trí chung hay không
CLLocationManager.locationServicesEnabled()
- Nếu người dùng đã cấp quyền chính xác cho ứng dụng của bạn ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Bạn có thể thêm tiện ích mở rộng là một tùy chọn hữu ích:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Ở đây nó đang được truy cập khi người dùng yêu cầu chỉ đường lần đầu tiên:
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Đây là đại biểu:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
thay vìCLLocationManager.loationServicesEnabled()
Solved!