Ich habe eine Frage zu CLLocationManagerDelegate
. Die Dokumentation sagt, wenn der Benutzer die Einstellungen für Ihre Standortdienste ändert (in der iPhone-App Einstellungen.app), dann soll Ihre App eine Nachricht didChangeAuthorizationStatus:
an den Delegaten erhalten. Meine Frage ist, wann würde das passieren?
Wenn der Nutzer die Einstellung geändert hat, bedeutet dies, dass er sich in der App "Einstellungen" befindet und Ihre App entweder im Hintergrund läuft oder gar nicht läuft. Im ersten Fall würde der CLLocationManager
-Delegat Ihrer App den didChangeAuthorizationStatus:
erhalten anrufen?
Ich bin gerade vor einer Stunde über diese Methode gestolpert, so gut Timing auf die Frage!
Es sieht so aus, dass diese Methode in meinem Fall aufgerufen wird:
Ich habe eine schnelle Test-App geschrieben, die Sie hier finden können:
Es protokolliert einfach den Autorisierungsstatus, wann immer die Methode aufgerufen wird.
Diese Delegate-Methode wird aufgerufen, wenn:
Das erste Mal, wenn Sie eine CLLocationManager
-Instanz initialisieren
1.1. Wenn Ihre App das erste Mal auf dem Gerät gestartet wird, erhalten Sie den Status kCLAuthorizationStatusNotDetermined
, bevor der Benutzer die Option [Zulassen / Nicht zulassen] UIAlertView
anzeigt. (Zu diesem Zeitpunkt können Sie feststellen, dass die UISwitch
Ihrer App unter Einstellungen - Datenschutz - Standortdienst deaktiviert oder nicht angezeigt wird.
1.2. Wenn der Nutzer die App neu startet Da beim vorherigen Start eine Entscheidung getroffen wurde, können Sie den Status abrufen.
Das erste Mal nach der Benutzerentscheidung. Das ist offensichtlich. Nachdem Sie startUpdatingLocation
/ startUpdatingHeading
aufgerufen haben, zeigt iOS UIAlertView
.
In der Situation Ihrer Antwort hat der Benutzer Änderungen an den Einstellungen vorgenommen. Wenn Ihre App im Hintergrund ausgeführt wird, erhalten Sie den neuen Status, wenn Ihre App aktiv wird. Andernfalls referenzieren Sie 1.2.
Ich bin in letzter Zeit auf dieses Problem mit der Bearbeitung von Änderungen der Standortgenehmigung gestoßen und habe viel geforscht und debuggt.
Wenn die App überhaupt nicht ausgeführt wird und der Benutzer die Standortberechtigungen in den Einstellungen ändert, wird beim Start der App locationManager: didChangeAuthorizationStatus aufgerufen, wenn der Standortmanager wie in der Antwort von mharper angegeben initialisiert wird. Dieses Verhalten ist nicht in Apples Dokumenten enthalten.
Wenn die App im Hintergrund / suspendiert ist, habe ich sie im Simulator getestet und es sieht so aus, als ob die Delegate-Funktion auch aufgerufen wird.
Tags und Links iphone authorization cllocationmanager settings delegates