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