Проверка для iOS служб геолокации

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

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

редактировать:

этот код не работает для меня. Я использую тренажер. Я всегда получаю "да", когда спрашиваю 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 ответов


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

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

if([CLLocationManager locationServicesEnabled] && 
   [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
...
}

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


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

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


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