LocationServicesEnabled всегда возвращает ДА
Я тестировал свое устройство (iPod Touch 2G iOS 4.1), если службы определения местоположения включены
permitted = [locationManager locationServicesEnabled];
и я всегда получаю ДА, включены ли службы определения местоположения или нет. Я говорю об общей кнопке для служб определения местоположения, а не о конкретной кнопке приложения. На iPad с iOS 3.2.2 все работает нормально.
Ответы
Ответ 1
Когда вы реализуете делегат для менеджера местоположений, вы должны внедрить didFailWithError. Там вы получите соответствующую ошибку, если пользователь не разрешил доступ к местоположению
Apple Documentation States:
Если пользователь отказывает вашим приложениям в использовании службы определения местоположения, этот метод сообщает об ошибке kCLErrorDenied
. После получения такой ошибки вы должны остановить службу определения местоположения.
Ответ 2
Помните, что [locationManager locationServicesEnabled]
устарел с iOS 4.0.
Вместо этого используйте метод класса [CLLocationManager locationServicesEnabled]
.
Кнопка приложения может быть восстановлена
[CLLocationManager authorizationStatus]
Ответ 3
Когда вы используете
[CLLocationManager locationServicesEnabled]
то вы проверяете, включены ли службы locationServices во всей системе. Поэтому, когда вы переходите в Настройки → Службы определения местоположения, и вы видите этот первый переключатель. Этот метод возвращает состояние этого состояния и не относится к вашему приложению.
Если вам нужно знать, имеет ли ваше приложение доступ к службам определения местоположения, используйте ответ @Pascalius.
Ответ 4
[CLLocationManager locationServicesEnabled] вернет NO, когда пользовательская кнопка настройки переключится на OFF, только тогда я достиг НЕТ.
Ответ 5
if(![CLLocationManager locationServicesEnabled] || ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse && [CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedAlways))
{
; // app doesn't have access to localization to whatever you want
}
Ответ 6
Swift 3.1 возвращает функции → статус: Bool и сообщение: String
func isLocationEnabled() -> (status: Bool, message: String) {
if CLLocationManager.locationServicesEnabled() {
switch(CLLocationManager.authorizationStatus()) {
case .notDetermined, .restricted, .denied:
return (false,"No access")
case .authorizedAlways, .authorizedWhenInUse:
return(true,"Access")
}
} else {
return(false,"Turn On Location Services to Allow App to Determine Your Location")
}
}