AudioQueueStart在iOS 7的后台进程中失败,并且后台进程失败-16981

问题描述:

在我所有先前版本操作系统的iOS应用程序中,我们偶尔录制音频,然后休眠一段时间,然后重新录制,然后永远循环(睡眠需要维护电池)。即使应用程序在后台,这也可以在iOS 7中正常运行。现在,当应用程序处于后台时,对AudioQueueStart的调用无法开始录制,并显示错误:-16981。我似乎无法在文档或Web上找到此错误代码,并且如果将它变为NSError,它会显示“操作无法完成(OSStatus错误-16981。)”,它不是'这一切都很有帮助。AudioQueueStart在iOS 7的后台进程中失败,并且后台进程失败-16981

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

所以;任何人都可以证实或否认这是预期的,或者我可能会对此做些什么。这对我们的应用程序来说有点杀手锏。我已经将它作为Apple的一个bug提交,并且会尝试在此处报告进度。

更新:2013年10月3日

虽然以前的答案似乎为这个工作一段时间;它已经停止与-12985工作,这是因为另一个应用程序已打开音频。这当然是为什么我需要使用混合标志。

UPDATE:

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

+0

真的吗?这是一个编程问题,而AskDifferent似乎更适合高级用户而不是开发人员。我希望有人可能知道AudioQueueStart函数的-16981可能意味着什么,以及如何解决它。 –

+0

我对iOS不熟悉,但如果操作系统发生变化,我认为你会在apple @ stackexhange获得更多有效的帮助。但要怪我英语不好。我误解了该页面也适用于软件相关问题的部分。 – xQuare

+0

在iOS 7上遇到同样的问题。 –

在播放不同的音频会话属性后,我发现当kAudioSessionProperty_OverrideCategoryMixWithOthers启用(TRUE)时发生-16981错误。一旦我设置为'0',AudioQueueStart()就会成功执行。因此,在启动音频会议前尝试:

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

显然,这是iOS中7的行为改变由于这是前面提到的,文件没有列出-16981错误代码。

+0

干得好;那工作。看起来它是一个真正的bug,所以我会将这些信息添加到Apple bug中。 –

+0

由于尝试这样做,我当然发现我们确实需要在一般情况下进行混音,所以尽管如果我无法在后台打开音频,但我可以在iOS 7上优雅地退化以关闭它,但这仍然很很多苹果代码中的错误,我仍然在与他们的情况下 –

+0

在这方面的任何进展?我正在研究一个MIDI应用程序,它可以在后台发送MIDI时钟消息。它在iOS 6中工作正常,但使用iOS7时,它将在最小化时不再运行。我使用的是Xamarin,所以我不确定这是苹果的bug还是Xamarin的,所以你可以提供任何进一步的细节。 –