在我所有以前版本的操作系统上的iOS应用程序中,我们偶尔记录音频,然后睡觉一段时间,然后再记录,然后永远循环(睡眠是为了维护电池)。即使在应用程序处于后台时,iOS 7也能很好地工作。现在,当应用程序处于后台时,对AudioQueueStart的调用无法开始记录错误:-16981。我似乎无法在文档或网络上找到这个错误代码,如果我将其转换为NSError,它会说“操作无法完成。(OSStatus error -16981.)",这并没有多大帮助。
我有一个理论认为,苹果公司正在填补一个漏洞;这个想法是:除非你是在监视,否则你为什么要从背景过程开始录音?好吧,如果用户同意(签名和付费!),这正是我们正在做的事情。
所以,谁能证实或否认这是预期的,或者我能做些什么。这对我们的应用来说是个杀手。我已经把它作为一个bug提交给苹果,并将尝试在这里报告进展情况。
最新情况:2013年10月3日
虽然之前的答案似乎对此适用了一段时间,但它现在已经停止使用-12985,这是因为另一个应用程序打开了音频。这就是为什么我需要使用混合旗子。
更新:
iOS 7.0.3 (及更高版本)似乎完全解决了这个问题。
发布于 2013-09-24 04:45:17
在播放了不同的音频会话属性之后,我发现-16981错误发生在启用kAudioSessionProperty_OverrideCategoryMixWithOthers时(TRUE)。当我将它设置为'0‘时,AudioQueueStart()就会成功地执行。因此,在启动音频会话之前,请尝试:
UInt32 allowMixing = 0;
status = AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryMixWithOthers,
sizeof (allowMixing),
&allowMixing);显然,这是iOS 7中的行为更改。正如前面提到的,文档没有列出-16981错误代码。
https://stackoverflow.com/questions/18947837
复制相似问题