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

Lan*_*ler 8 iphone settings delegates authorization cllocationmanager

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

如果用户更改了设置,则表示他们位于设置应用中,并且您的应用是背景或根本没有运行,所以在前一种情况下,您的应用的CLLocationManager代表什么时候才能didChangeAuthorizationStatus:接听电话?

mha*_*per 9

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

看起来在我的情况下这个方法被调用:

  1. 当应用程序变为活动状态时
  2. 在应用程序的初始启动时允许应用程序的位置服务.

我写了一个你可以在这里找到的快速测试应用:

https://github.com/mharper/LocationServices

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

  • 这很有帮助.从Apple文档(https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/#//apple_ref/occ/intfm/CLLocationManagerDelegate/locationManager:didChangeAuthorizationStatus :)中,似乎应该这样只有在权限更改时才会被调用,但我同意您的评估,即每当启动应用程序时也会调用此权限,即使在启动之间未触及权限也是如此. (3认同)
  • @PaulBrewczynski是的,文档错误/不完整.我认为最正确的答案是,当首次设置位置管理员的代表时也会调用它,通常是在您启动应用程序时. (2认同)

小智 6

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

  1. 第一次启动CLLocationManager实例时

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

    1.2.用户重新启动您的应用程序时.由于已在先前的启动中做出决定,因此您可以检索状态.

  2. 用户做出决定后的第一次.这很明显.你打电话给startUpdatingLocation/后startUpdatingHeading,然后iOS显示UIAlertView.

  3. 在您的答案情况下,用户在"设置"中进行了更改,如果您的应用程序在后台运行,则当您的应用程序变为活动状态时,您将收到新状态.否则,参考1.2.