我知道当您点击主页按钮或 sleep /唤醒按钮时会调用“applicationWillResignActive”。当发生中断(如本地调用)时也会调用它。但是我怎样才能确定哪种方法导致了这种方法并做一些不同的实现呢?
最佳答案
您无法直接找出所有原因,但可以稍微缩小范围。
如果按下主页按钮并将应用程序发送到后台,您的应用程序将收到 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
被调用,状态为 kAudioSessionBeginInterruption
之前 applicationWillResignActive:
,则您知道中断是由电话或警报引起的。我认为您无法获得更多信息。编辑
实际上,我认为您可以走得更远一点,确定电话与警报中断。现在这个还没有经过测试,只是为了给更多的调查提供一个起点。
我记得注册了一个回调来捕获音频路由,当接到电话时,路由的音频从扬声器/耳机更改为无到接收器。所以我想你可以使用上面描述的方法捕获 AudioInterruption,并捕获音频路由变化。如果音频路由成为接收者,则中断是一个电话调用。否则,它就是别的东西,比如警报。
我的目标是 iOS 5.0,因此它可能不适用于以前的版本,您必须与文档确认。
关于ios - 我可以检测到导致 "applicationWillResignActive"调用的原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915455/