Как проверить, включены ли службы определения местоположения для определенного приложения до iOS 4.2? - PullRequest
36 голосов
/ 15 января 2011

Как я могу проверить, разрешил ли пользователь местоположение для приложения мю? Обычно я бы использовал authorizationStatus метод класса CLLocationManager, но он доступен только в iOS 4.2 и новее. Можно ли как-то этого добиться, еще используя SDK 4.2, чтобы приложение могло работать на устройствах с более старыми версиями iOS, или мне нужно понизить SDK? И в том же духе мне нужна аналогичная альтернатива для метода locationServicesEnabled до iOS 4.0.

Ответы [ 3 ]

60 голосов
/ 16 января 2011

Когда вы звоните по номеру -startUpdatingLocation, если пользователю службы определения местоположения было отказано, делегат менеджера местоположения получит вызов на номер -locationManager:didFailWithError: с кодом ошибки kCLErrorDenied.Это работает как во всех версиях iOS.

37 голосов
/ 12 июня 2011

В коде ниже я объединил две техники

    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];
    }
7 голосов
/ 16 января 2011

Хм .. Я не думал использовать authorizationStatus или locationServicesEnabled. Я сделал следующее:

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

Я рад, что есть лучший способ проверки, но у меня не было проблем с тем, как я могу определить, разрешено ли моему приложению использовать GPS.

Надеюсь, это поможет!

...