为什么要求摄像机/麦克风权限触发applicationDidBecomeActive?

时间:2018-12-11 18:46:19

标签: swift

我已经接管了一个项目,该项目处理AppDelegate内的“ applicationDidBecomeActive”功能中首先显示哪个屏幕。这引起了问题,因为每当应用程序有时(并非全部)请求许可时,它将触发此代码块并将用户发送到错误的屏幕。我不确定该怎么做,因为我以前从未遇到过。有什么想法为什么会发生或如何避免这种情况?我尝试添加一个标志变量,但是,它似乎并不能始终如一地工作,因为它似乎在触发applicationDidBecomeActive之前未设置。

3 个答案:

答案 0 :(得分:2)

显示诸如“权限”之类的系统通知时,该应用程序将发送到后台或变为“非活动”状态。取消权限通知后,应用程序将再次变为“活动”状态。这可以解释为什么didBecomeActive被触发了。

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622956-applicationdidbecomeactive

答案 1 :(得分:0)

  

我已经接管了一个项目,该项目负责处理哪个屏幕首先显示在AppDelegate内的“ applicationDidBecomeActive”功能中。有任何想法为什么会发生或如何避免这种情况?

简单的答案是:不要在applicationDidBecomeActive()中执行此操作。如您所见,应用程序可能会变得不活动,然后在应用程序保持在前台状态时又再次处于活动状态,因此这并不是您正在执行的正确状态转换。确定您确实希望选择屏幕的应用程序状态转换。例如,您可能想在应用启动时以及从后台过渡到前景时执行此操作,因此可以使用application(_:didFinishLaunchingWithOptions:)applicationWillEnterForeground(_:)。 (显然,您不想将相同的代码放在两个地方,因此将其放在单独的方法中,而仅从这两个方法中调用它即可。)

Apple的文档涵盖了这个主题:Managing Your App's Life CycleUIApplicationDelegate参考页上还有很多有关应用程序状态的信息。这两个文档都包含有用的状态转换图以及各种状态的含义的描述。

答案 2 :(得分:0)

作为解决方案;您可以使用 applicationWillEnterForeground()。它在 applicationDidBecomeActive() 之前被调用,而不是由权限请求触发。