【问题标题】:When does an iphone application receive didChangeAuthorizationStatus: delegate call?iphone 应用程序何时收到 didChangeAuthorizationStatus: 委托调用?
【发布时间】:2011-11-08 03:56:18
【问题描述】:

我有一个关于CLLocationManagerDelegate 的问题。文档说,如果用户更改了您的定位服务设置(在 iPhone 的 Settings.app 中),那么您的应用程序应该会收到一个 didChangeAuthorizationStatus: 给代理的消息。我的问题是,什么时候会发生这种情况?

如果用户更改了设置,这意味着他们在设置应用程序中,并且您的应用程序要么在后台运行,要么根本没有运行,所以在前一种情况下,您的应用程序的 CLLocationManager 委托何时会获得 didChangeAuthorizationStatus:打电话?

【问题讨论】:

    标签: iphone delegates authorization settings cllocationmanager


    【解决方案1】:

    我一个小时前才遇到这种方法,这个问题的时机太好了!

    在我的例子中,这个方法似乎被调用了:

    1. 应用激活时。
    2. 在应用首次启动时允许应用定位服务。

    我编写了一个快速测试应用程序,您可以在这里找到:

    https://github.com/mharper/LocationServices

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

    【讨论】:

    • 这很有帮助。从 Apple 文档 (developer.apple.com/library/ios/documentation/CoreLocation/…:) 看来,这似乎只应在权限更改时调用,但我同意您的评估,即在启动应用程序时也会调用它,即使在两次启动之间未触及权限.
    • @PaulBrewczynski 是的,文档错误/不完整。我认为最正确的答案是,首次设置位置管理器的委托时也会调用它,通常是在您启动应用程序时。
    【解决方案2】:

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

    1. 第一次初始化 CLLocationManager 实例时

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

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

    2. 用户做出决定后的第一次。这是显而易见的。调用startUpdatingLocation/startUpdatingHeading后,iOS会显示UIAlertView。

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

    【讨论】:

      【解决方案3】:

      如果您的应用程序在后台运行或根本没有运行,它将在用户返回您的应用程序时被调用。

      【讨论】:

        【解决方案4】:

        我也遇到了同样的问题。

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

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

        【讨论】:

          【解决方案5】:

          我最近遇到了正确处理位置权限更改的问题,并做了很多研究和调试。

          如果应用程序根本没有运行并且用户在设置中更改了位置权限,那么当您启动应用程序时, locationManager:didChangeAuthorizationStatus 会在位置管理器被初始化时被调用,如 mharper 的回答中所述。这种行为不在 Apple 的文档中。

          如果应用程序处于后台/暂停状态,我在模拟器中对其进行了测试,看起来也调用了委托函数。

          【讨论】:

            猜你喜欢
            • 2012-01-01
            • 2016-08-29
            • 1970-01-01
            • 2013-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多