位置服务表现得很奇怪

时间:2014-03-28 05:35:23

标签: ios cllocationmanager

我想检测位置服务是否已启用,并且我想在我的应用中启用或禁用该按钮。为此,我写了

if([CLLocationManager locationServicesEnabled])
 // Enable button
else 
 // Disbale button

但是,我发现这种方法有一种奇怪的行为。来自设置,

1)如果我关闭位置服务,对于除上述方法之外的所有应用程序,返回NO。(正如预期的那样)

2)如果我打开locationServices,但是关闭我的特定应用程序,而不是返回YES。

这是正确的行为吗?如果是,那么是否有任何其他方法可以在应用级别查找位置服务是启用还是撤消。任何想法。

3 个答案:

答案 0 :(得分:0)

当您使用locationServicesEnabled方法查找是否为您的应用启用了位置服务时,我想清除locationServicesEnabled检测是否为设备启用了位置服务。它不会检查特定的应用程序。

Apple Docs 它返回一个布尔值,指示是否在设备上启用了位置服务

您可以使用locationManager:didFailWithError:来检测特定应用的位置服务

来自Apple documentation

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

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    if ([[error domain] isEqualToString: kCLErrorDomain] && [error code] == kCLErrorDenied) {
        // Location Services are denied.
    }
}

答案 1 :(得分:0)

您应该检查CLLocationManager的{​​{3}}属性,看看您的应用是否有权访问位置信息 -

if ([CLLocationManager locationServicesEnabled] && (CLLoctionManager.authorizationStatus == kCLAuthorizationStatusAuthorized)) {
  // Enable button
}
else {
  // Disable button
}

答案 2 :(得分:0)

使用此

+(BOOL)checkLocationService {

    if (![CLLocationManager locationServicesEnabled])
        return NO; //location service disabled
    else if(kCLAuthorizationStatusAuthorized!=[CLLocationManager authorizationStatus])
        return NO; //app's location service disabled
    return YES;
}