18 Stimmen

So fordern Sie den Benutzer auf, die Standortdienste zu aktivieren...wieder

Ich möchte die gleiche Funktionalität wie die Karten-App haben, bei der der Benutzer jedes Mal, wenn er auf die Schaltfläche "Aktueller Standort" drückt, aufgefordert wird, seine Standortdienste zu aktivieren, falls sie ausgeschaltet sind:

  • Standortdienste deaktivieren
  • Benutzer drückt 'getCurrentLocation' Taste
  • Die Anwendung versucht, den Standort mit CLLocationManager zu ermitteln
  • Der Benutzer erhält die Meldung "Standortdienste einschalten...", die die Schaltflächen "Einstellungen" und "Abbrechen" anzeigt.
  • Benutzer tippt auf 'Abbrechen'
  • Benutzer drückt erneut die Taste "getCurrentLocation".
  • App versucht erneut, den Standort mit CLLocationManager zu ermitteln
  • Benutzer erhält nicht mehr die Meldung "Standortdienste einschalten...".

In der Karten-App erhält der Benutzer jedes Mal die Meldung "Turn On Location Services...". Wie kann ich meine App dazu bringen, das Gleiche zu tun? Ich habe sichergestellt, dass ich eine neue Instanz von CLLocationManager verwende, falls dies das Problem war, aber das war es nicht. Ich kann keine Einstellungen sehen, die dies beeinflussen würden.

Wenn ich meinen eigenen Alert erstelle, kann ich nicht die gleiche Funktionalität der Schaltfläche "Einstellungen" erhalten. Außerdem möchte ich nicht, dass der Benutzer mehrere gleich aussehende Warnmeldungen sieht.

Irgendwelche Ideen?

0 Stimmen

Die Funktionalität, die wir in der Kartenanwendung sehen, kann also nicht in unseren eigenen Anwendungen nachgebildet werden, lautet die Schlussfolgerung? Keine Lösung, wie es scheint? Irgendwelche Updates? Ich arbeite an einer iOS 7-App...

22voto

Aaron Wasserman Punkte 1229

Neu in iOS 8 gibt es eine Konstante namens UIApplicationOpenSettingsURLString .

Von der "Was ist neu in iOS" Dokument unter UIKit ist die Zeile:

Sie können den Benutzer direkt zu Ihren app-bezogenen Einstellungen in der App Einstellungen führen. Übergeben Sie die UIApplicationOpenSettingsURLString Konstante für die Methode openURL: der Klasse UIApplication.

Von Apples Dokumentation :

UIApplicationOpenSettingsURLString

Wird verwendet, um eine URL zu erstellen, die Sie an die Methode openURL: übergeben können. Wenn Sie die aus dieser Zeichenkette erstellte URL öffnen, startet das System die App "Einstellungen" und zeigt die benutzerdefinierten Einstellungen der App an, sofern diese vorhanden sind.

Sie können dies in der UIApplication openURL: Methode übergeben. Sie könnte etwa so aussehen:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];

18voto

Jacob White Punkte 365

Wenn Sie den Benutzer zurück zum Bildschirm "Standortdienste" in der App "Einstellungen" leiten möchten, können Sie ihn an eine spezielle URL senden, etwa so:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];

10voto

PeyloW Punkte 36534

Sie können die gemeinsamen CLLocationManager Instanz, wenn der Standortdienst aktiviert ist. Die richtig Der beste Weg ist, die Entscheidung des Nutzers zu respektieren, die Ortungsdienste zu deaktivieren.

Aber wenn Sie wollen, starten Sie den Ortungsdienst einfach trotzdem und der Benutzer wird aufgefordert, ihn erneut zu starten. Wenn der Benutzer der Aufforderung zustimmt, werden die Standorte wie üblich an Ihren Delegierten gemeldet. Wenn der Benutzer stattdessen Ihre Anfrage ablehnt, erhalten Sie einen Fehler-Callback an die locationManager:didFailWithError: Methode delegieren. Der Fehler wird mit einem Fehlercode von kCLErrorDenied .

Ich würde Ihnen dringend davon abraten, aber Sie können versuchen, den Dienst erneut zu starten, wenn der Benutzer nein sagt, und der Benutzer wird erneut gefragt. Die meisten Benutzer werden Sie dafür allerdings hassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X