为什么CLLocationManager总是返回true?

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

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

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

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

CLLocationManager混淆很多。

有任何想法吗?

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

从文档

locationServicesEnabled

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

讨论

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

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

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

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