Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я комбинировал два метода в коде ниже

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

Ответ 3

Хм.. Я не думал использовать 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.

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