Fügen Sie das CLLocationManagerDelegate
zu Ihrer Klassenvererbung hinzu, und dann können Sie folgende Prüfung durchführen:
Swift 1.x - 2.x Version:
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .NotDetermined, .Restricted, .Denied:
print("No access")
case .AuthorizedAlways, .AuthorizedWhenInUse:
print("Access")
}
} else {
print("Location services are not enabled")
}
Swift 4.x Version:
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
}
} else {
print("Location services are not enabled")
}
Swift 5.1 Version
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
@unknown default:
break
}
} else {
print("Location services are not enabled")
}
manager.locationServicesEnabled()
nichtCLLocationManager.loationServicesEnabled()
gelöst!authorizationStatus
wird eingestellt , umnotDetermined
dann statt nur Protokollierung es besser wäre , den Benutzer aufzufordern , ‚Zulassen / nicht zulassen“In Ziel-c
Sie sollten den bereits abgelehnten oder nicht bestimmten Benutzer verfolgen und dann um Erlaubnis bitten oder den Benutzer an die Einstellungs-App senden.
Implementieren Sie alertView Delegate und senden Sie den Benutzer, um den Standortdienst zu aktivieren, wenn er vom Benutzer bereits abgelehnt wurde.
Init Location Manager
Bitte beachten Sie, dass kCLAuthorizationStatusAuthorizedAlways und kCLAuthorizationStatusAuthorizedWhenInUse ein Unterschied sind.
quelle
SWIFT (Stand 24. Juli 2018)
Hier erfahren Sie, ob der Benutzer bereits eine Einstellung für die Standortberechtigungsanforderung der App ausgewählt hat
quelle
Es ist nur eine 2-Zeilen-Funktion in Swift 4:
quelle
Hier ist das von Apple empfohlene Format .
Hier ist ein vollständiges Beispiel.
Dies beinhaltet
AlertView
eine Schaltfläche, mit der der Benutzer zumSettings
Bildschirm weitergeleitet werden kann, wenn ihm zuvor der Zugriff verweigert wurde.quelle
Erstellen Sie für swift3.0 und höher eine Klasse wie unten, wenn häufige Überprüfungen der Verfügbarkeit von Ortungsdiensten durchgeführt werden.
und dann verwenden Sie es so in Ihrem VC
quelle
Wenn Sie -startLocation aufrufen und der Benutzer die Standortdienste verweigert, erhält der Standortmanager-Delegat einen Anruf an -
locationManager:didFailWithError
: mit demkCLErrorDenied
Fehlercode. Dies funktioniert in allen Versionen von iOS.quelle
Use of unresolved identifier 'kCLErrorDenied'
. Gedanken?In Swift 3.0
quelle
So bitten Sie um Erlaubnis für von Ihnen verwendete Ortungsdienste:
Wenn der Status derzeit unbestimmt ist, wird eine Warnung angezeigt, in der der Benutzer aufgefordert wird, den Zugriff zuzulassen. Wenn der Zugriff verweigert wird, wird Ihre App im CLLocationManagerDelegate benachrichtigt. Wenn die Berechtigung zu irgendeinem Zeitpunkt verweigert wird, werden Sie hier aktualisiert.
Es gibt zwei separate Status, die Sie überprüfen müssen, um die aktuellen Berechtigungen zu ermitteln.
CLLocationManager.locationServicesEnabled()
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Sie können eine Erweiterung hinzufügen, eine praktische Option:
}}
Hier wird darauf zugegriffen, wenn der Benutzer zum ersten Mal eine Wegbeschreibung angefordert hat:
Hier ist der Delegierte:
quelle