2010-11-30 2 views
20

Ich habe eine Ansicht mit einer Karte und einer Schaltfläche (wie die Google Maps App), mit der der Benutzer seinen aktuellen Standort auf der Karte zentrieren und zoomen kann. Wenn ich die locationServicesEnabled-Methode nicht verwenden kann (gibt immer YES zurück), sollte ich ein BOOL-Attribut erstellen, um zu überprüfen, ob die Methode didFailWithError aufgerufen wird und ob ich die Button-Methode aufrufen kann?Überprüfung auf iOS-Standortdienste

Danke fürs Lesen.

Edited:

Dieser Code für mich nicht funktioniert. Ich benutze den Simulator. Ich bekomme immer JA, wenn ich locationServicesEnabled frage.

// Gets the user present location. 
- (IBAction)locateUser:(id)sender { 

    if([CLLocationManager locationServicesEnabled]) { 

     CLLocationCoordinate2D coordinate; 

     coordinate.latitude = self.mapView.userLocation.location.coordinate.latitude; 
     coordinate.longitude = self.mapView.userLocation.location.coordinate.longitude; 

     [self zoomCoordinate:coordinate]; 
    } else { 
     [[[[UIAlertView alloc] initWithTitle:@"Warning." message:@"Location services are disabled." 
            delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];  
    } 
} 
+1

Ich habe gepostet ** optimierten Location Permission Check ** auf diesen Beitrag, wird dies definitiv helfen Ihnen http://StackOverflow.com/Questions/15153074/checking-location-Service-permission-on-ios/35982887#35982887 – swiftBoy

Antwort

99

In den Einstellungen haben Sie zwei Optionen, um die Ortungsdienste zu deaktivieren. Die erste Option ist ein globaler Schalter zum Deaktivieren des Standortdiensts für alle Apps "[CLLocationManager locationServicesEnabled]". Mit der zweiten Option können Sie den Standortdienst für einige Apps deaktivieren, jedoch nicht für alle Apps.

Wenn es deaktiviert global Um zu überprüfen, und wenn seine deaktiviert für Ihre App verwenden folgende:

if([CLLocationManager locationServicesEnabled] && 
    [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied) 
{ 
... 
} 
+0

Ich habe mir etwas Mühe gegeben, weil die Überprüfung von [CLLocationManager locationServicesEnabled] nicht ausreichend war. Vielen Dank! – fellowworldcitizen

+0

Danke, perfekt. Funktioniert gut für mich. – Jasmeet

+0

Fantastische Lösung ..... –

1

"locationServicesEnabled" prüft, ob der Benutzer in Preferences die Location Services aktiviert hat. Ihr MapView prüft diesen Wert wahrscheinlich bereits und sollte keine Werte auf "self.mapView.userLocation" setzen, wenn die Ortungsdienste nicht verfügbar sind. This SO question might give you some more info.

+0

Ich habe meine bearbeitet Frage. –

1

Ich laufe auch in dieses Problem und immer noch die Antwort zu finden sein.

sorgen dafür, dass authorizationStatus erfordert iOS4.2 + und + (BOOL) locationServicesEnabled erfordert iOS4.0 ... Und für frühere iOS-Versionen ist es - (BOOL) locationServicesEnabled ...

1
- (BOOL) enableLocationServices 
{ 

    if ([CLLocationManager locationServicesEnabled]) 
    { 
     self.locationManager.distanceFilter = 10; 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
     [self.locationManager startUpdatingLocation]; 
     [self.mapview setUserTrackingMode:MKUserTrackingModeFollow animated:YES]; 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
}