如何检测我的应用程序的位置服务禁用?

时间:2010-09-30 13:37:53

标签: iphone core-location cllocationmanager

IOS4最近为特定的应用程序提供了启用/禁用位置服务的可能性。

我需要检测MY应用程序的此设置是启用/禁用

首先我尝试过:

if ([CLLocationManager locationServicesEnabled])
    {
       ....
    } 

然而,这指的是全球定位服务,而不是特定的应用程序设置。

第二次我曾尝试使用

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
   ...
} 

可行但是在禁用服务应用设置的情况下会调用它,在其他情况下,例如,如果某个措施因某些原因失败,则会调用它。

我需要一个代码来检测是否允许我的应用程序使用位置服务。

我如何实现这一目标?

感谢您的支持

3 个答案:

答案 0 :(得分:24)

来自locationManager: didFailWithError:

的文档
  

如果用户拒绝您的应用程序   使用位置服务,这个   方法报告kCLErrorDenied错误。   收到这样的错误后,你   应该停止定位服务。

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    if ([[error domain] isEqualToString: kCLErrorDomain] && [error code] == kCLErrorDenied) {
        // The user denied your app access to location information.
    }
}

您可以找到其他错误代码here

答案 1 :(得分:10)

我更喜欢使用

-(BOOL)locationAuthorized {
  return ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized);
}

在locationServicesEnabled属性上,因为它引用的是手机级别,而不是您的应用程序。

答案 2 :(得分:1)

根据Apple docs on CLLocationManager,有一个名为+ (BOOL)locationServicesEnabled的属性应该就是这样。

相关问题