locationServicesEnabled始终返回YES

时间:2010-10-27 14:02:31

标签: iphone objective-c cocoa-touch cllocationmanager

如果启用了位置服务,我测试了我的设备(iPod Touch 2G iOS 4.1)

permitted = [locationManager locationServicesEnabled];

我总是得到YES,无论是否启用了位置服务。我说的是位置服务的常规按钮,而不是应用程序特定的按钮。在iOS 3.2.2的iPad上,一切正常。

6 个答案:

答案 0 :(得分:35)

请注意[locationManager locationServicesEnabled]deprecated since iOS 4.0。 请改用类方法[CLLocationManager locationServicesEnabled]

The App Specific Button can be retrieved by

[CLLocationManager authorizationStatus]

答案 1 :(得分:8)

使用时

[CLLocationManager locationServicesEnabled]

然后检查是否在整个系统中启用了locationServices。所以当你去设置 - >位置服务,你看到第一个开关。该方法返回该状态的状态,与您的应用程序无关。

如果您需要知道您的应用是否可以访问位置服务,请使用@Pascalius answer。

答案 2 :(得分:4)

实现位置管理器的委托时,您应该实现didFailWithError。如果用户不允许访问位置

,那么您将收到相应的错误

<强> Apple Documentation States: 如果用户拒绝您的应用程序使用位置服务,则此方法会报告kCLErrorDenied错误。收到此类错误后,您应该停止位置服务。

答案 3 :(得分:2)

Swift 3.1函数返回 - &gt; status:Bool和message: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")
    }
}

答案 4 :(得分:1)

if(![CLLocationManager locationServicesEnabled] || ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse && [CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedAlways))
{
        ; // app doesn't have access to localization to whatever you want
}

答案 5 :(得分:0)

当用户设置按钮切换为OFF时,

[CLLocationManager locationServicesEnabled]将返回NO,然后我才获得NO。