我知道当您点按“主页”按钮或“睡眠/唤醒”按钮时,将调用“applicationWillResignActive”。当发生中断(如本机调用)时也会调用它。但是,我如何识别这种方法中的哪一个结果并做一些不同的实现呢?
答案 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,因此它可能不适用于以前的版本,您必须与该文档确认。