AVAudioSession 类由 AVFoundation 框架引入。每一个 iOS 应用都有一个音频会话。这个会话能够被 AVAudioSession 类的 sharedInstance 类方法访问,以下:bash
AVAudioSession *audioSession = [AVAudioSession sharedInstance];session
在得到一个 AVAudioSession 类的实例后,你就能经过调用音频会话对象的 setCategory:error:实例方法,来从 iOS 应用可用的不一样类别中做出选择。框架
AVAudioSessionCategoryAmbientui
这个类别不会中止其余应用的声音,相反,它容许你的音频播放于其余应用的声音之 上,好比 iPod。你的应用的主 UI 线程会工做正常。调用 AVAPlayer 的 prepareToPlay 和 play 方法都将返回 YES。spa
AVAudioSessionCategorySoloAmbient 这个很是像 AVAudioSessionCategoryAmbient 类别,除了会中止其余程序的音频回放,好比 iPod 程序。当设备被设置为静音模式,你的音频回放将会中止。线程
AVAudioSessionCategoryRecordcode
这会中止其余应用的声音(好比 iPod)并让你的应用也不能初始化音频回放(好比 AVAudioPlayer)。在这种模式下,你只能进行录音。使用这个类别,调用 AVAudioPlayer 的 prepareToPlay 会返回 YES,可是调用 play 方法将返回 NO。主 UI 界面会照常工做。这时, 即便你的设备屏幕被用户锁定了,应用的录音仍会继续。对象
AVAudioSessionCategoryPlayback开发
这个类别会禁止其余应用的音频回放(好比 iPod 应用的音频回放)。你可使用 AVAudioPlayer 的 prepareToPlay 和 play 方法,在你的应用中播放声音。主 UI 界面会照常工做。这时,即便屏幕被锁定或者设备为静音模式,音频回放都会继续。it
AVAudioSessionCategoryPlayAndRecord
这个类别容许你的应用中同时进行声音的播放和录制。当你的声音录制或播放开始后, 其余应用的声音播放将会中止。主 UI 界面会照常工做。这时,即便屏幕被锁定或者设备为 静音模式,音频回放和录制都会继续。
AVAudioSessionCategoryAudioProcessing 这个类别用于应用中进行音频处理的情形,而不是音频回放或录制。设置了这种模式, 你在应用中就不能播放和录制任何声音。调用 AVAPlayer 的 prepareToPlay 和 play 方法都将 返回 NO。其余应用的音频回放,好比 iPod,也会在此模式下中止。
解决方案:当咱们本身开发的应用播放时,暂停其余应用的播放,当咱们的应用播放完毕时,继续其余应用的播放,核心代码以下:
// 继续播放后台背景音乐, 取消激活当前应用的audio session
+ (void)resumeBackgroundSoundWithError:(NSError **)error {
[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:error];
}
//暂停后台背景音乐的播放,激活当前应用的audio
+ (void)pauseBackgroundSoundWithError:(NSError **)error {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionAllowBluetooth error:error];
[session setActive:YES error:error];
}
+ (void)pauseBackgroundSoundWithCategoryRecord {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:nil];
[session setActive:YES error:nil];
}
复制代码
1.Category的选择,取决于在激活应用的audio session时,下一步要录音仍是播放,若是录音的话,必定要设置category为AVAudioSessionCategoryRecord
1.若是是播放,那就设置AVAudioSessionCategoryPlayback
3.若是准备要录音,而设置成了AVAudioSessionCategoryPlayback,可能会获得一个意想不到的的结果Unexpected error or warning