LocationServicesEnabled всегда возвращает ДА

Я тестировал свое устройство (iPod Touch 2G iOS 4.1), если службы определения местоположения включены

permitted = [locationManager locationServicesEnabled];

и я всегда получаю ДА, включены ли службы определения местоположения или нет. Я говорю об общей кнопке для служб определения местоположения, а не о конкретной кнопке приложения. На iPad с iOS 3.2.2 все работает нормально.

Ответ 1

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

Apple Documentation States: Если пользователь отказывает вашим приложениям в использовании службы определения местоположения, этот метод сообщает об ошибке kCLErrorDenied. После получения такой ошибки вы должны остановить службу определения местоположения.

Ответ 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")
    }
}