Um Erlaubnis für standortbezogene Dienste fragen Sie verwenden:
yourSharedLocationManager.requestWhenInUseAuthorization()
Wenn der Status zur Zeit wird ein Alarm Zugang zu ermöglichen, den Benutzer auffordert, zeigt nicht bestimmt. Wenn der Zugriff verweigert wird, wird Ihre App im CLLocationManagerDelegate benachrichtigt. Wenn die Berechtigung zu irgendeinem Zeitpunkt verweigert wird, werden Sie hier ebenfalls aktualisiert.
Es gibt zwei separate Status, die Sie prüfen müssen, um die aktuellen Berechtigungen zu ermitteln.
- Wenn der Benutzer über die allgemeinen Standortdienste aktiviert oder nicht
CLLocationManager.locationServicesEnabled()
- Wenn der Benutzer die entsprechende Berechtigung für Ihre Anwendung erteilt hat ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Sie könnten eine Erweiterung hinzufügen, ist eine praktische Option:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Hier wird zugegriffen wird, wenn der Benutzer zum ersten Mal Richtungen angefordert hat:
private func requestUserLocation() {
//when status is not determined this method runs to request location access
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
//have accuracy set to best for navigation - accuracy is not guaranteed it 'does it's best'
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
//find out current location, using this one time request location will start the location services and then stop once have the location within the desired accuracy -
locationManager.requestLocation()
} else {
//show alert for no location permission
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Hier ist der Delegierte:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Yup! Vielen Dank! Mein Problem war, dass ich versuche, locatoinServicesEnabled auf meinem Manager zu nennen, das heißt 'manager.locationServicesEnabled()' statt 'CLLocationManager.loationServicesEnabled()' gelöst! –
Ich bekomme es, dass Ihr Code nur ein Beispiel ist, aber es ist ein wenig irreführend ... Ich denke, es ist besser, wenn "authorizationStatus" ist * set * zu 'notDetermined' dann anstelle nur Protokollierung wäre es besser, den Benutzer 'Zulassen'/Lassen Sie nicht " – Honey
@Honey, sicher, dass Sie natürlich verwenden könnten, wie Sie bevorzugen und wie Sie sagten, der Code ist nur ein Beispiel, um zu zeigen, wie es verwendet werden könnte. –