2010-08-04 9 views
8

Ich habe die Standortdienste für meine Anwendung im Einstellungsbereich deaktiviert. Ich betreibe einen Test in viewDidLoad in meiner Ansicht-Controller, um zu sehen, wenn sie aktiviert sind:locationServicesEnabled Test wird bestanden, wenn sie in viewDidLoad deaktiviert sind

if([CLLocationManager locationServicesEnabled]) { 
    //Do something now 
} 

Dieser Test besteht immer aus irgendeinem Grund. Wenn ich versuche, auf Lokalisierungsdienste zuzugreifen, erhalte ich einen kCLErrorDenied-Fehler für den Standortmanager. Was gibt?

Benutze ich den falschen Test?

Antwort

25

Die locationServicesEnabled Klassenmethode testet nur die globale Einstellung für Location Services. AFAIK, es gibt keine Möglichkeit zu testen, ob deine App explizit abgelehnt wurde. Sie müssen warten, bis die Standortanforderung fehlschlägt, und mithilfe der CLLocationManagerDelegate-Methode locationManager: didFailWithError: alles tun, was Sie benötigen. Z.B .:

- (void)locationManager: (CLLocationManager *)manager 
     didFailWithError: (NSError *)error { 

    NSString *errorString; 
    [manager stopUpdatingLocation]; 
    NSLog(@"Error: %@",[error localizedDescription]); 
    switch([error code]) { 
     case kCLErrorDenied: 
      //Access denied by user 
      errorString = @"Access to Location Services denied by user"; 
      //Do something... 
      break; 
     case kCLErrorLocationUnknown: 
      //Probably temporary... 
      errorString = @"Location data unavailable"; 
      //Do something else... 
      break; 
     default: 
      errorString = @"An unknown error has occurred"; 
      break; 
     } 
    } 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

finden Sie in der Dokumentation zu den CLError Konstanten in der CLLocationManager class reference für weitere Optionen.

+0

Das macht dann Sinn, warum es immer wahr zurückgibt. Vielen Dank! – Adam

+0

@ Dan, wenn locationServicesEnabled ist falsch, dann habe ich lange gewartet, aber delegate (locationManager: didFailWithError :) Methode wird nicht aufgerufen. was ist der Grund?? – Apple

20

Mit iOS 4.2 kann jetzt bestimmt werden, ob Standortdienste über die Methode CLLocationManager +authorizationStatus abgelehnt wurden.