Проверка сервисов определения местоположения iOS - PullRequest
20 голосов
/ 01 декабря 2010

У меня есть вид с картой и кнопкой (например, приложение «Карты»), которая позволяет пользователю центрировать и масштабировать свое текущее местоположение на карте. Если я не могу использовать метод locationServicesEnabled (всегда возвращает YES), я должен создать атрибут BOOL, чтобы проверить, вызывается ли метод didFailWithError, и узнать, могу ли я вызвать метод кнопки?

Спасибо за чтение.

Отредактировано:

Этот код не работает для меня. Я использую симулятор. Я всегда получаю ДА, когда спрашиваю locationServicesEnabled.

// Gets the user present location.
- (IBAction)locateUser:(id)sender {

    if([CLLocationManager locationServicesEnabled]) {

        CLLocationCoordinate2D coordinate;

        coordinate.latitude = self.mapView.userLocation.location.coordinate.latitude;
        coordinate.longitude = self.mapView.userLocation.location.coordinate.longitude;

        [self zoomCoordinate:coordinate];
    } else {
        [[[[UIAlertView alloc] initWithTitle:@"Warning." message:@"Location services are disabled." 
                                    delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];     
    }
}

Ответы [ 4 ]

99 голосов
/ 14 июля 2011

В настройках у вас есть два варианта отключить службы определения местоположения. Первый вариант - это глобальный переключатель для отключения службы определения местоположения для всех приложений «[CLLocationManager locationServicesEnabled]». Второй вариант позволяет отключить службу определения местоположения для некоторых приложений, но не для всех приложений.

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

if([CLLocationManager locationServicesEnabled] && 
   [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
...
}
1 голос
/ 11 марта 2016
- (BOOL) enableLocationServices
{

    if ([CLLocationManager locationServicesEnabled])
    {
        self.locationManager.distanceFilter = 10;
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        [self.locationManager startUpdatingLocation];
        [self.mapview setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
        return YES;
    }
    else
    {
        return NO;
    }
}
1 голос
/ 23 сентября 2011

Я тоже столкнулся с этой проблемой и все еще нахожу ответ.

позаботьтесь о том, чтобы для authorizationStatus требовалось iOS4.2 + и + (BOOL) locationServicesEnabled требовало iOS4.0 ... А для предыдущих версий iOS,это - (BOOL) расположениеУслугиEnabled ...

1 голос
/ 01 декабря 2010

«locationServicesEnabled» проверяет, активировал ли пользователь службы определения местоположения в настройках.Ваш MapView, вероятно, уже проверяет это значение и не должен устанавливать какие-либо значения в self.mapView.userLocation, если службы определения местоположения недоступны. Этот SO вопрос может дать вам больше информации.

...