web-dev-qa-db-fra.com

Comment vérifier si les services de localisation sont activés pour une application particulière avant iOS 4.2?

Comment puis-je vérifier si l'utilisateur a autorisé la localisation de l'application mu? Normalement, j'utiliserais la méthode authorizationStatus de la classe CLLocationManager, mais elle n'est disponible que dans iOS 4.2 et plus récent. Est-il possible de le faire d'une manière ou d'une autre tout en utilisant le SDK 4.2, afin que l'application puisse toujours fonctionner sur des appareils avec des versions antérieures d'iOS, ou dois-je rétrograder le SDK? Et dans le même ordre d'idées, j'ai besoin d'une alternative similaire pour la méthode locationServicesEnabled avant iOS 4.0.

36
pajevic

Quand vous appelez -startUpdatingLocation, si les services de localisation ont été refusés par l'utilisateur, le délégué du gestionnaire de localisation recevra un appel à -locationManager:didFailWithError: avec le code d'erreur kCLErrorDenied. Cela fonctionne à la fois dans toutes les versions d'iOS.

60
Martin Gordon

J'ai combiné deux techniques dans le code ci-dessous

    MKUserLocation *userLocation = map.userLocation;
    BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
    BOOL locationAvailable = userLocation.location!=nil;

    if (locationAllowed==NO) {
        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];
        [alert release];
    } else {
        if (locationAvailable==NO) 
            [self.map.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
    }
37
EasyCoder

Hmm .. Je ne pensais pas utiliser authorizationStatus ou locationServicesEnabled. Ce que j'ai fait était le suivant:

MKUserLocation *userLocation = mapView.userLocation;

if (!userLocation.location) {
    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];
    [alert release];
    return;
}

Je suis heureux de voir qu'il existe une meilleure méthode pour vérifier, mais je n'ai eu aucun problème avec la façon dont je détecte si mon application est autorisée à utiliser le GPS.

J'espère que cela t'aides!

7
donkim