我需要一种在 AudioSession 初始化后更改或禁用 AudioSessionInterruptionListener 的方法。
原因如下:在某些用例中,我的应用程序必须在后台运行并进行录音,因此设置了音频背景模式 - 这很有效。当发生呼叫或其他中断时,我必须通知其他一些对象干净地停止录制 - 这很有效。然后,当应用程序使用我调用的 AudioSession 完成时AudioSessionSetActive(false);
- 这有效(如果应用程序在会话处于活动状态的情况下发送到后台,我会在顶部看到红色条,如果会话处于非活动状态,则不会出现红色条。虽然,我猜,从技术上讲,该应用程序仍处于“活动”后台模式)。
然而!如果我完成了录制,并且应用程序已经发送到后台并且音频会话已经被停用,如果有来电,或者如果 Siri 被激活,那么我的应用程序仍然会收到 AudioSessionInterruptionListener 回调。是的,我可以添加代码来测试我的应用程序当前是否应该响应中断。但是,我认为这是一个错误。如果我已停用 AudioSession,则应停止调用中断,实际上应停止调用所有音频会话/属性侦听器。
如何更改或禁用 AudioSessionInterruptionListener?或者用另一种方式来问这个问题,我怎样才能防止我的应用在不需要时“使用”后台模式?
附加信息
好的,似乎在 iOS 6 中现在有 NSNotifications for AudioSession interrupts:AVAudioSessionDidBeginInterruptionNotification
和AVAudioSessionDidEndInterruptionNotification
. 但是,我支持 iOS 5.1 及更高版本,所以这无济于事。我发现新通知的同一个文档说,Obj-C 接口 AVAudioSession 的委托属性已被贬低(在 IOS 6 中),所以我可能不应该使用它来设置/更改委托(并获取 Obj -C 中断回调)。
我想一个可能的解决方法是测试 iOS 版本并在 <6.0 中设置和取消设置委托,然后在 6.0+ 中侦听 NSNotifications(不会出现在 <6.0 中,因此不应该中断)。然而,这似乎是一个杂牌。