AudioQueueStart在iOS 7上从后台进程失败,带有-16981

时间:2013-09-22 19:24:02

标签: ios background ios7 audioqueue

在所有以前版本操作系统的iOS应用程序中,我们偶尔会录制音频,然后再睡一会儿,然后重新录制,然后循环播放(睡眠是为了维持电池)。即使应用程序处于后台,这也适用于iOS 7。现在,当应用程序在后台时,对AudioQueueStart的调用无法开始录制并显示错误:-16981。我似乎无法在文档或Web上找到此错误代码,如果我将其转换为NSError,则会显示“操作无法完成。(OSStatus error -16981。)”,这不是'这一切都很有帮助。

我有一个理论认为苹果正在关闭这个洞;这个想法是;你为什么要从后台进程开始录音,除非你是间谍?好吧,在用户同意(签名并付费!)的情况下,这正是我们正在做的事情。

因此;任何人都可以确认或否认这是预期的,或者我可以做些什么。这对我们的应用程序来说有点杀手锏。我已将其作为Apple的错误提交,并将尝试在此报告进度。

更新:2013年10月3日

虽然之前的答案似乎对此有用了一段时间;它已经停止使用-12985,这是因为另一个应用程序打开了音频。这当然是我需要使用混合标志的原因。

更新:

iOS 7.0.3(及更高版本)似乎完全解决了这个问题。

1 个答案:

答案 0 :(得分:4)

在使用不同的音频会话属性后,我发现启用kAudioSessionProperty_OverrideCategoryMixWithOthers时为-16981错误(TRUE)。很快,当我将其设置为'0'时,AudioQueueStart()成功执行。因此,在开始音频会话之前,请尝试:

UInt32 allowMixing = 0;
status = AudioSessionSetProperty (
                      kAudioSessionProperty_OverrideCategoryMixWithOthers,
                      sizeof (allowMixing),
                      &allowMixing);

显然,这是iOS 7中的行为更改。如前所述,文档未列出-16981错误代码。