Wann erhält eine iPhone-Anwendung didChangeAuthorizationStatus: delegate call?

8

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?

    
Lana Miller 01.09.2011, 06:18
quelle

5 Antworten

9

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:

  1. Wenn die App aktiv wird.
  2. Beim Erlauben von Standortdiensten für die App beim ersten Start der App.

Ich habe eine schnelle Test-App geschrieben, die Sie hier finden können:

Ссылка

Es protokolliert einfach den Autorisierungsstatus, wann immer die Methode aufgerufen wird.

    
mharper 01.09.2011, 21:01
quelle
6

Diese Delegate-Methode wird aufgerufen, wenn:

  1. 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.

  2. Das erste Mal nach der Benutzerentscheidung. Das ist offensichtlich. Nachdem Sie startUpdatingLocation / startUpdatingHeading aufgerufen haben, zeigt iOS UIAlertView .

  3. 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.

Black.Lee 26.01.2014 08:01
quelle
1

Wenn Ihre App im Hintergrund ausgeführt wird oder nicht, wird sie in dem Moment aufgerufen, in dem der Benutzer zu Ihrer Anwendung zurückkehrt.

    
atreat 17.08.2012 15:48
quelle
0

Ich stoße auch auf das gleiche Problem.

meine Lösung ist die Anfrage gps Autorisierungscode in Hauptschleife.

Ich denke, es kann auch funktionieren, wenn Sie eine andere Laufschleife einfügen.

    
zxshi 11.08.2015 22:00
quelle
0

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.

    
Lee Kang 30.12.2015 22:21
quelle