locationServicesEnabled Test bestanden wird, wenn sie in viewDidLoad deaktiviert werden

StackOverflow https://stackoverflow.com/questions/3401757

  •  25-09-2019
  •  | 
  •  

Frage

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

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

Dieser Test besteht immer aus irgendeinem Grund. Wenn ich versuche, und Zugang Ortungsdienste erhalte ich einen kCLErrorDenied Fehler für den Standort-Manager. Was soll das?

Am ich den falschen Test?

War es hilfreich?

Lösung

Die locationServicesEnabled Klasse Methode testet nur die globale Einstellung für Location Services. AFAIK, gibt es keine Möglichkeit zu testen, ob Ihre App ausdrücklich verweigert. Sie werden warten müssen, um für die Standortanforderung die CLLocationManagerDelegate Methode zum Scheitern verurteilt und verwenden Locationmanager: didFailWithError: zu tun, was Sie brauchen. Z.

- (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];
}

Sehen Sie die Dokumentation zu den CLError Konstanten in der CLLocationManager Klassenreferenz für weitere Optionen.

Andere Tipps

iOS 4.2 nun erlaubt es, festzustellen, ob die Standortdienste durch die CLLocationManager +authorizationStatus Verfahren verweigert wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top