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