1

我正在使用[CLLocationManager locationServicesEnabled]功能来获取位置服务是否启用的状态。我将代码保留在viewDidLoad方法中。

if(![CLLocationManager locationServicesEnabled])
{
    NSLog(@"No");
}
else
{
    NSLog(@"Yes");
}

当我第一次运行这个应用程序时,它会返回Yes。为什么?它应该返回我No。当我没有选择“允许”或“不允许”选项时就是这种情况。表示我既不允许也不不允许,但viewDidLoad我得到了Yes.

现在我选择“不允许”并再次加载相同的viewController. 这时候至少它应该还给我No,但我还是得到了Yes。为什么?

这么多的混乱CLLocationManager

有任何想法吗?

4

1 回答 1

5

locationServicesEnabled返回是否在设置中启用了定位服务。如果在设置中启用,则此函数YES一直返回。

文档

locationServicesEnabled

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

讨论

用户可以通过在一般情况下切换定位服务开关来从设置应用程序启用或禁用定位服务。

您应该在开始位置更新之前检查此方法的返回值,以确定用户是否为当前设备启用了位置服务。如果此方法返回 NO 并且您仍然开始位置更新,Core Location 框架会提示用户确认是否应重新启用位置服务。

用户是否允许/拒绝应用程序权限(在警报视图中)不影响此方法的返回值。

如果您想知道用户是否已授予应用程序访问位置的权限,您可以使用authorizationStatus

于 2012-12-20T09:56:13.617 回答