2013-06-21 6 views
6

Fall: Für den aktuellen Standort hat der Benutzer "Nicht zulassen" bei der App-Installation ausgewählt, also gibt es eine Möglichkeit, dass ich erneut nach dem Benutzerstandort fragen und den nativen iphone-Alarm für den aktuellen Standort auslösen kann ??iphone fragen nach Aktuelle Standorterlaubnis erneut

ich einige Beiträge auf Stackoverflow gesehen, aber es gibt alte, gibt es jetzt eine Lösung in neuen sdk oder jemanden anrufen, einen Weg,

Beitrag gefunden genannt: CLLocation ask again for permission

+2

das ist immer noch keine Möglichkeit, verlangen, wenn der Benutzer wählen Sie „erlauben“ oder „verweigern“, es nur einmal pro ändern App installiert – adali

Antwort

8

Leider können Sie das nicht tun. Sie können den Benutzer zum Ändern der Standorteinstellungen auffordern.

if (![CLLocationManager locationServicesEnabled]) 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                 message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
} 
+1

Ich habe dies bereits getan, aber der Kunde Sie wissen, wollen alles, was sie in ihrem Kopf haben: | –

+0

nett :) besser sollten Sie die Situation und ihre Vorteile für den Kunden sagen. – manujmv

0

Ich glaube nicht, dass es ist die Art, die Erlaubnis erneut zu stellen. Wenn Sie jedoch den Benutzerstandort wirklich benötigen, können Sie einen Warnhinweis anzeigen, der sie anweist, die Einstellungen zu aktivieren.

5

Es scheint, die akzeptierte Antwort nicht ganz richtig ist. [CLLocationManager locationServicesEnabled] prüft, ob die Standortdienste aktiviert sind, wie in der Dokumentation beschrieben.

Gibt einen booleschen Wert zurück, der angibt, ob Standortdienste auf dem Gerät aktiviert sind. Der Benutzer kann Standortdienste in der Anwendung "Einstellungen" aktivieren oder deaktivieren, indem er den Schalter "Standortdienste" in "Allgemein" umschaltet. Sie sollten den Rückgabewert dieser Methode vor dem Starten von Standortaktualisierungen überprüfen, um festzustellen, ob für den Benutzer Standortdienste für das aktuelle Gerät aktiviert sind. Ortsdienste fordern Benutzer auf, wenn sie zum ersten Mal versuchen, standortbezogene Informationen in einer App zu verwenden, werden jedoch nicht aufgefordert, weitere Versuche durchzuführen. Wenn der Benutzer die Verwendung von Standortdiensten verweigert und Sie trotzdem versuchen, Standortaktualisierungen zu starten, meldet der Standortmanager seinem Delegierten einen Fehler.

Wenn Sie überprüfen möchten, ob der Benutzer Ihnen die Erlaubnis zur Verwendung seines Standorts gegeben hat, sollten Sie [CLLocationManager authorizationStatus] überprüfen. Wenn der Status für Ihre App kCLAuthorizationStatusDenied lautet, bedeutet dies, dass Nutzer Ihre App explizit abgelehnt haben, als sie nach der Berechtigung gefragt hat. Sie können dies verwenden und den Benutzer entsprechend informieren.

5

In ios8 hat Apple eine UIApplicationOpenSettingsURLString-Konstante eingeführt, die die Position der Ansichtseinstellungen des Geräts darstellt.

Sie können den Code folgende (in swift) den Benutzer auf die Einstellungen zu richten an:

switch CLLocationManager.authorizationStatus() { 
    case .AuthorizedWhenInUse, .Restricted, .Denied: 
     let alertController = UIAlertController(
      title: "Background Location Access Disabled", 
      message: "In order to be notified, please open this app's settings and set location access to 'Always'.", 
      preferredStyle: .Alert) 

     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) 
     alertController.addAction(cancelAction) 

     let openAction = UIAlertAction(title: "Open Settings", style: .Default) { (action) in 
      if let url = NSURL(string:UIApplicationOpenSettingsURLString) { 
       UIApplication.sharedApplication().openURL(url) 
      } 
     } 
     alertController.addAction(openAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 
} 
+0

Müssen Sie nicht nach der Systemversion suchen, bevor Sie die Aktion "Einstellungen öffnen" hinzufügen? –

0

Das ist, was ich tat die bisherigen Antworten Berücksichtigung (dies ist in Monotouch C# aber leicht übersetzbar Swift oder Obj-C)

Die folgenden Fragen um Erlaubnis und dann fortfahren zur Standortaktualisierung, wenn sie gewährt werden. Andernfalls wird das nächste Mal der Benutzer kommen; wenn die Ortungsdienste deaktiviert oder verweigert sind, wird es eine Meldung angezeigt, die Erlaubnis/Aktivierung mit einer Umleitung zu den Einstellungen

//Location Manager (foreground) 
     CLLocationManager locMgr = new CLLocationManager(); 
     locMgr.PausesLocationUpdatesAutomatically = false; 

     if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
     { 
      locMgr.RequestWhenInUseAuthorization(); 
     } 

     if (CLLocationManager.LocationServicesEnabled && CLLocationManager.Status == CLAuthorizationStatus.AuthorizedWhenInUse) 
     { 
      //set the desired accuracy, in meters 
      locMgr.DesiredAccuracy = 150; 
      locMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => 
      { 
       Console.WriteLine(e.Locations); 
      }; 

      locMgr.StartUpdatingLocation(); 
     } 
     else if (!CLLocationManager.LocationServicesEnabled || CLLocationManager.Status == CLAuthorizationStatus.Denied) 
     { 
      var alert = UIAlertController.Create(NSBundle.MainBundle.LocalizedString("Location access", "Location access"), NSBundle.MainBundle.LocalizedString("Please check location", "To show your position on the map, you have to enable location services and authorize the app"), UIAlertControllerStyle.Alert); 

      alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Cancel, null)); 

      if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
      { 
       alert.AddAction(UIAlertAction.Create(NSBundle.MainBundle.LocalizedString("Go to settings", "Go to settings"), UIAlertActionStyle.Default, delegate 
       { 

        var url = new NSUrl(UIApplication.OpenSettingsUrlString); 
        UIApplication.SharedApplication.OpenUrl(url); 

       })); 
      } 

      PresentViewController(alert, true, null); 
     } 
Verwandte Themen