【问题标题】:Can I detect what cause the "applicationWillResignActive" calling?我可以检测出导致“applicationWillResignActive”调用的原因吗?
【发布时间】:2012-10-16 13:09:34
【问题描述】:

我知道当您点击主页按钮或睡眠/唤醒按钮时会调用“applicationWillResignActive”。当发生中断(如本地调用)时也会调用它。但是我怎样才能确定是哪一个导致了这种方法并做一些不同的实现呢?

【问题讨论】:

    标签: ios background multitasking


    【解决方案1】:

    您无法直接找出所有原因,但可以稍微缩小范围。

    如果按下主页按钮并将应用程序发送到后台,您的应用程序将在您的 UIApplicationDelegate 上收到applicationDidEnterBackground: 调用。请注意,您将在applicationWillResignActive: 电话之后收到此信息,因此它可能对您没有帮助。

    你也可以为音频中断注册一个监听器

    AudioSessionInitialize (
                            NULL,                          // 'NULL' to use the default (main) run loop
                            NULL,                          // 'NULL' to use the default run loop mode
                            audioSessionInteruptionListener,  // a reference to your interruption callback
                            self                       // data to pass to your interruption listener callback
                            );
    

    如果audioSessionInteruptionListener被调用并且状态是kAudioSessionBeginInterruptionapplicationWillResignActive:之前,那么你知道中断是由电话或警报引起的。我认为您无法获得更多信息。

    编辑

    实际上,我认为您可以走得更远一点,确定电话中断与警报中断。现在这个还没有经过测试,只是为了给更多的调查提供一个起点。

    我记得注册了一个回调来捕获音频路由,当接到电话时,路由的音频从扬声器/耳机更改为无到接收器。所以我想你可以使用上面描述的方法捕获 AudioInterruption,并捕获音频路由变化。如果音频路由成为接收者,则中断是一个电话呼叫。否则,它就是别的东西,比如警报。

    我的目标是 iOS 5.0,所以它可能不适用于以前的版本,您需要与文档确认。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多