为什么CLLocationManager总是返回true?

时间:2012-12-20 09:52:19

标签: iphone ios mkmapview cllocationmanager viewdidload

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

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

当我第一次运行此应用时,它会返回Yes。为什么?它应该给我No。当我没有选择“允许”或“不允许”选项时就是这种情况。意味着我既不允许也不允许,但在viewDidLoad我得到Yes

现在我选择“不允许”并再次加载相同的viewController。此时至少它应该返回No,但我仍然得到Yes。为什么呢?

CLLocationManager混淆了很多。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

locationServicesEnabled返回是否在设置上启用了位置服务..如果在设置中启用了此功能,则此函数始终返回YES ..

来自documentation

  

<强> locationServicesEnabled

     

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

     

<强>讨论

     

用户可以从“设置”启用或禁用位置服务   通过在常规中切换位置服务开关来应用。

     

您应该在开始之前检查此方法的返回值   位置更新以确定用户是否具有位置服务   已启用当前设备。如果此方法返回NO并且您   无论如何,开始位置更新,核心位置框架提示   用户确认是否应重新启用位置服务。

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

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