我可以检测出“applicationWillResignActive”调用的原因吗?

时间:2012-10-16 13:09:34

标签: ios background multitasking

我知道当您点按“主页”按钮或“睡眠/唤醒”按钮时,将调用“applicationWillResignActive”。当发生中断(如本机调用)时也会调用它。但是,我如何识别这种方法中的哪一个结果并做一些不同的实现呢?

1 个答案:

答案 0 :(得分:4)

您无法直接识别所有原因,但可以将其缩小一点。

如果按下主页按钮并将应用程序发送到后台,您的应用程序将在您的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之前调用了kAudioSessionBeginInterruption并且状态为applicationWillResignActive:,那么您就知道中断是由电话呼叫或警报引起的。我不认为你可以获得更多信息。

修改

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

我记得有一个回调注册陷阱音频路由,当收到电话时,音频路由从扬声器/耳机变为无至接收器。所以我猜你可以使用上面描述的方法捕获AudioInterruption,并捕获音频路由更改。如果音频路由成为Receiver,则中断是电话呼叫。否则,它就像是闹钟一样。

我的目标是iOS 5.0,因此它可能不适用于以前的版本,您必须与该文档确认。