1

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

4

1 回答 1

4

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

如果按下主页按钮并将应用程序发送到后台,您的应用程序将applicationDidEnterBackground:在您的 UIApplicationDelegate 上收到调用。请注意,您将在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被调用并且状态是kAudioSessionBeginInterruptionbefore applicationWillResignActive:,那么您就知道中断是由电话或警报引起的。我认为您无法获得更多信息。

编辑

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

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

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

于 2012-10-16T13:17:33.600 回答