36 votes

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

Comment puis-je vérifier si l'utilisateur a autorisé l'emplacement pour l'application mu? Normalement , j'utilise authorizationStatus méthode de CLLocationManager classe, mais il est uniquement disponible dans iOS 4.2 et plus récent. Est-il possible d'y parvenir d'une manière ou d'une autre tout en utilisant encore le SDK 4.2, afin que l'application puisse toujours fonctionner sur des appareils dotés d'anciennes versions d'iOS, ou dois-je rétrograder le SDK? Et parallèlement, il me faut une alternative similaire pour la méthode locationServicesEnabled antérieure à iOS 4.0.

Merci

60voto

Martin Gordon Points 19587

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

37voto

EasyCoder Points 403

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

7voto

donkim Points 9829

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 de vérification, mais je n'ai rencontré 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!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X