情景再现:
在开发过程中,发现执行以下代码的时候,xcode控制台输出了一个错误。
[[AVAudioSession sharedInstance] setActive:NO
withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
error:nil];
报的错误如下:
[avas] AVAudioSession.mm:1074:-[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
上面的代码是在录音完成的时候去恢复其他应用的正在播放的音频。其实就是,在录音的时候,要停止其他APP的一切声音,录完之后再恢复。就是在恢复的时候出了问题。
问题分析:
如果你自己的app在录音前后没有播放声音的话,就不会出现以上问题。
问题就出在自己的app在播放音效的时候,开始录音,录完之后恢复,出问题了。
我的app是在cocos2d游戏中进行录音。
从报的错误来看,就是在执行上面代码的时候,AVAudioSession没有停止,虽然在前面已经执行了[recoder stop],但是游戏中的AVAudioSession并没有停止。
我的解决办法:
在我的应用中,录音的时候并不需要去停止和恢复其他app的声音,在打开应用的时候就关闭了其他声音。只需要录完音恢复游戏的声音就可以。
所以执行以下代码就可以达到目的:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];
这句是设置AVAudioSession为默认属性。
附:录音开始的时候需要设置为:
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];