Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone应用程序何时收到didChangeAuthorizationStatus:delegate呼叫?_Iphone_Delegates_Authorization_Settings_Cllocationmanager - Fatal编程技术网

iphone应用程序何时收到didChangeAuthorizationStatus:delegate呼叫?

iphone应用程序何时收到didChangeAuthorizationStatus:delegate呼叫?,iphone,delegates,authorization,settings,cllocationmanager,Iphone,Delegates,Authorization,Settings,Cllocationmanager,我有一个关于CLLocationManagerDelegate的问题。文档中说,如果用户更改了您位置服务的设置(在iPhone的settings.app中),那么您的应用程序应该会收到一条发送给代表的didChangeAuthorizationStatus:消息。我的问题是,什么时候会发生这种情况 如果用户更改了设置,这意味着他们在设置应用程序中,而你的应用程序要么是后台的,要么根本没有运行,那么在前一种情况下,你的应用程序的CLLocationManager代理什么时候才能获得didChang

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


如果用户更改了设置,这意味着他们在设置应用程序中,而你的应用程序要么是后台的,要么根本没有运行,那么在前一种情况下,你的应用程序的
CLLocationManager
代理什么时候才能获得
didChangeAuthorizationStatus:
调用?

我一小时前刚刚遇到过这个方法,在这个问题上,这么好的时机

在我的例子中,似乎调用了此方法:

  • 当应用程序激活时
  • 在应用程序初始启动时允许应用程序的位置服务
  • 我编写了一个快速测试应用程序,你可以在这里找到:


    每当调用该方法时,它只会记录授权状态。

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

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

  • 第一次初始化
    CLLocationManager
    实例时

    1.1。如果这是您的应用首次在设备上启动,则在用户看到[Allow/Not Allow]
    UIAlertView
    之前,您将收到状态
    kCLAuthorizationStatusNotDetermined
    。(此时,您可以在设置-隐私-位置服务中发现应用程序的
    ui开关已关闭或未显示

    1.2.当用户重新启动您的应用程序时。因为在上次启动时已做出决定,所以您可以检索状态

  • 用户做出决定后的第一次。这是显而易见的。在您调用
    startUpdatingLocation
    /
    startUpdatingHeading
    后,iOS将显示
    UIAlertView

  • 在您回答的情况下,用户更改了设置,如果您的应用程序在后台运行,则当您的应用程序处于活动状态时,您将收到新状态。否则,请参考1.2


  • 我也遇到了同样的问题

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


    我想,如果您加入另一个运行循环,它也可以工作。

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

    如果应用程序根本没有运行,并且用户在“设置”中更改了位置权限,则当您启动应用程序时,当按照mharper的回答初始化位置管理器时,会调用locationManager:didChangeAuthorizationStatus。苹果的文档中没有此行为


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

    这很有用。来自Apple文档(:),似乎只有在权限更改时才应该调用它,但我同意您的评估,即每次启动应用程序时都会调用它,即使在两次启动之间权限未被触及。@PaulBrewczynski是的,文档是错误的/不完整的。我认为最正确的答案是,当定位人员ager的代理是第一个设置,通常在您启动应用程序时设置。