我对CLLocationManagerDelegate
有疑问。文档说明如果用户更改了您的位置服务的设置(在iPhone的Settings.app中),那么您的应用应该向代表收到didChangeAuthorizationStatus:
消息。我的问题是,这会发生什么时候?
如果用户更改了设置,则表示他们位于设置应用中,并且您的应用已经背景或根本没有运行,因此在前一种情况下,您应用的CLLocationManager
代表何时获得{ {1}}致电?
答案 0 :(得分:9)
我刚刚在一小时前遇到过这种方法,这个问题的时机非常好!
在我看来,这个方法看起来像是:
我写了一个你可以在这里找到的快速测试应用程序:
https://github.com/mharper/LocationServices
只要调用方法,它就会记录授权状态。
答案 1 :(得分:6)
在以下情况下将调用此委托方法:
首次启动CLLocationManager
实例
1.1。如果这是您的应用首次在设备上启动,则在用户看到[允许/不允许] kCLAuthorizationStatusNotDetermined
之前,您将收到状态UIAlertView
。 (目前,您可以在设置 - 隐私 - 位置服务中找到您的应用的UISwitch
已关闭或未显示。
1.2。用户重新启动您的应用程序时。因为在之前的发布中做出了决定,所以您可以检索状态。
用户做出决定后的第一次。这很明显。在您致电startUpdatingLocation
/ startUpdatingHeading
后,iOS会显示UIAlertView
。
在您的答案中,用户在“设置”中进行了更改,如果您的应用程序在后台运行,则当您的应用程序处于活动状态时,您将收到新状态。否则,参考1.2。
答案 2 :(得分:1)
如果您的应用程序在后台运行或根本不运行,则会在用户返回您的应用程序时调用它。
答案 3 :(得分:0)
我也遇到了同样的问题。
我的解决方案是将请求gps授权代码放在主循环中。
我想如果你放入另一个运行循环它也可以工作。
答案 4 :(得分:0)
我最近遇到了正确处理位置权限更改的问题,并进行了大量的研究和调试。
如果应用程序根本没有运行且用户更改了“设置”中的位置权限,那么当您启动应用程序时,将按照mharper的答案中的说明初始化位置管理器时调用locationManager:didChangeAuthorizationStatus。这种行为不在Apple的文档中。
如果应用程序在后台/暂停,我在模拟器中测试它,看起来也调用了委托函数。