什么时候iphone应用程序收到didChangeAuthorizationStatus:委托调用?

时间:2011-09-01 06:18:48

标签: iphone delegates authorization settings cllocationmanager

我对CLLocationManagerDelegate有疑问。文档说明如果用户更改了您的位置服务的设置(在iPhone的Settings.app中),那么您的应用应该向代表收到didChangeAuthorizationStatus:消息。我的问题是,这会发生什么时候?

如果用户更改了设置,则表示他们位于设置应用中,并且您的应用已经背景或根本没有运行,因此在前一种情况下,您应用的CLLocationManager代表何时获得{ {1}}致电?

5 个答案:

答案 0 :(得分:9)

我刚刚在一小时前遇到过这种方法,这个问题的时机非常好!

在我看来,这个方法看起来像是:

  1. 当应用程序变为活动状态时。
  2. 在应用初次启动时允许应用的位置服务。
  3. 我写了一个你可以在这里找到的快速测试应用程序:

    https://github.com/mharper/LocationServices

    只要调用方法,它就会记录授权状态。

答案 1 :(得分:6)

在以下情况下将调用此委托方法:

  1. 首次启动CLLocationManager实例

    1.1。如果这是您的应用首次在设备上启动,则在用户看到[允许/不允许] kCLAuthorizationStatusNotDetermined之前,您将收到状态UIAlertView。 (目前,您可以在设置 - 隐私 - 位置服务中找到您的应用的UISwitch已关闭或未显示。

    1.2。用户重新启动您的应用程序时。因为在之前的发布中做出了决定,所以您可以检索状态。

  2. 用户做出决定后的第一次。这很明显。在您致电startUpdatingLocation / startUpdatingHeading后,iOS会显示UIAlertView

  3. 在您的答案中,用户在“设置”中进行了更改,如果您的应用程序在后台运行,则当您的应用程序处于活动状态时,您将收到新状态。否则,参考1.2。

答案 2 :(得分:1)

如果您的应用程序在后台运行或根本不运行,则会在用户返回您的应用程序时调用它。

答案 3 :(得分:0)

我也遇到了同样的问题。

我的解决方案是将请求gps授权代码放在主循环中。

我想如果你放入另一个运行循环它也可以工作。

答案 4 :(得分:0)

我最近遇到了正确处理位置权限更改的问题,并进行了大量的研究和调试。

如果应用程序根本没有运行且用户更改了“设置”中的位置权限,那么当您启动应用程序时,将按照mharper的答案中的说明初始化位置管理器时调用locationManager:didChangeAuthorizationStatus。这种行为不在Apple的文档中。

如果应用程序在后台/暂停,我在模拟器中测试它,看起来也调用了委托函数。