Проверка для 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;
}
}