locationServicesEnabled всегда возвращает YES - PullRequest
12 голосов
/ 27 октября 2010

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

permitted = [locationManager locationServicesEnabled];

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

Ответы [ 6 ]

35 голосов
/ 02 марта 2011

Помните, что [locationManager locationServicesEnabled] является устаревшим с iOS 4.0 . Вместо этого используйте метод класса [CLLocationManager locationServicesEnabled].

Кнопка, специфичная для приложения, может быть получена с помощью

[CLLocationManager authorizationStatus]
8 голосов
/ 10 декабря 2012

Когда вы используете

[CLLocationManager locationServicesEnabled]

, затем вы проверяете, включены ли locationServices во всей системе. Поэтому, когда вы идете в Настройки -> Службы определения местоположения, и вы видите, что первый переключатель. Этот метод возвращает состояние этого состояния и не связан с вашим приложением.

Если вам необходимо узнать, имеет ли ваше приложение доступ к службам определения местоположения, используйте ответ @Pascalius.

4 голосов
/ 27 октября 2010

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

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

2 голосов
/ 29 октября 2017

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")
    }
}
1 голос
/ 11 октября 2015
if(![CLLocationManager locationServicesEnabled] || ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse && [CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedAlways))
{
        ; // app doesn't have access to localization to whatever you want
}
0 голосов
/ 17 февраля 2014

[CLLocationManager locationServicesEnabled] вернет НЕТ, когда кнопка пользовательской настройки переключится в положение ВЫКЛ, только тогда я достиг НО.

...