2013-09-22 65 views
4

在我所有先前版本操作系統的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上遇到同樣的問題。 –

回答

4

在播放不同的音頻會話屬性後,我發現當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的,所以你可以提供任何進一步的細節。 –