我需要一種在AudioSession初始化後更改或禁用AudioSessionInterruptionListener的方法。如何更改或禁用AudioSessionInterruptionListener
這是爲什麼:在某些使用情況下,我的應用程序必須在帶有音頻錄製的背景中運行,因此音頻背景模式已設置 - 這是有效的。當一個電話或其他中斷髮生時,我必須通知一些其他對象來乾淨地停止錄音 - 這是有效的。然後當應用程序完成與AudioSession我呼籲AudioSessionSetActive(false);
- 這可以工作(如果應用程序發送到後臺與活動會話,我會得到頂部的紅色欄,如果會話不活動,紅色欄不會出現。儘管我猜,技術上應用程序仍處於「活動」後臺模式)。
但是!如果我已完成錄製,並且應用程序已發送到後臺並且音頻會話已停用,如果有來電,或者Siri已激活,那麼我的應用程序仍會收到AudioSessionInterruptionListener回調。是的,我可以添加代碼來測試我的應用程序當前是否應該響應中斷。但是,我認爲這是一個錯誤。如果我已經停用了AudioSession,中斷應該不會被調用,實際上所有的音頻會話/屬性監聽器都應該停止被調用。
如何更改或禁用AudioSessionInterruptionListener?或者,也許另一種方式來問這個問題,我怎樣才能防止我的應用程序在不需要它時使用背景模式?
其他信息
好吧,似乎在iOS 6中現在有NSNotifications爲AudioSession中斷:AVAudioSessionDidBeginInterruptionNotification
和AVAudioSessionDidEndInterruptionNotification
。不過,我支持iOS 5.1及以上版本,所以這沒有幫助。和我發現新通知的相同文檔說,Obj-C接口AVAudioSession的委託屬性已折舊(在IOS 6中),所以我可能不應該使用它來設置/更改委託(並獲取Obj -C中斷回調)。
我想一個可能的解決辦法是測試iOS版本,並在< 6.0設置和取消設置委託,然後在6.0 +聽取NSNotifications(這將不會出現在< 6.0,所以不應該'噸休息)。但是,這看起來像一團糟。
這真是太痛苦了。我正在處理它,因爲我正在使用C API,所以我感到更加痛苦。 – kakyo 2013-07-02 15:01:17