为什么CLLocationManager总是返回true?

San*_*gre 1 iphone viewdidload mkmapview cllocationmanager ios

我正在使用[CLLocationManager locationServicesEnabled]函数来获取是否启用位置服务的状态.我保留了viewDidLoad方法代码.

if(![CLLocationManager locationServicesEnabled])
{
    NSLog(@"No");
}
else
{
    NSLog(@"Yes");
}
Run Code Online (Sandbox Code Playgroud)

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

现在我选择"不允许"并再次加载它viewController.在这个时候,至少它应该归还我No,但我仍然得到了Yes.为什么?

这么多困惑CLLocationManager.

有任何想法吗?

Kri*_*dra 5

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

来自文档

locationServicesEnabled

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

讨论

用户可以通过切换"常规"中的"位置服务"开关,从"设置"应用程序启用或禁用位置服务.

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

用户是否允许/拒绝应用程序权限(在alertview中)不会影响此方法的返回值.

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