AVAudioSession.sharedInstance()导致其他App背景音乐被停止
2018-10-11 11:13 法子 阅读(2005) 评论(0) 编辑 收藏 举报参考文章:https://www.jianshu.com/p/3e0a399380df
在本App中AVAudioSession.sharedInstance()会使得其他App的背景音乐停止。应该本应用使用时候其他App背景音乐暂停,使用后恢复
1、可以在开启录音或播放时候
AVAudioSession.sharedInstance().setActive(true)
2、在录音完毕或播放完毕之后
AVAudioSession.sharedInstance().setActive(false, with: AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation)
注意:如果使用AVCaptureSession的startRunning,使用完成后要主动调用stopRunning。不然setActive为false会报错:
[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.
代码举例:
var isOtherAudioPlaying: Bool = false //播放代码 do { let player = try AVAudioPlayer.init(contentsOf: url) // player.delegate = self player.prepareToPlay() isOtherAudioPlaying = AVAudioSession.sharedInstance().isOtherAudioPlaying try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) player.play() } catch { }
//录音代码 do { let recorder = try AVAudioRecorder(url: url, settings: [AVFormatIDKey : NSNumber(value: kAudioFormatLinearPCM), AVSampleRateKey : 8000.0 as NSNumber, AVNumberOfChannelsKey : 1 as NSNumber, AVEncoderBitDepthHintKey : 16 as NSNumber, AVEncoderAudioQualityKey : AVAudioQuality.low.rawValue as NSNumber]) recorder.delegate = self // recorder.isMeteringEnabled = true if recorder.prepareToRecord() { isOtherAudioPlaying = AVAudioSession.sharedInstance().isOtherAudioPlaying try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) try AVAudioSession.sharedInstance().setActive(true) if recorder.record(forDuration:Double(60)) { } else { print("Failed to record.") } } else { print("Failed to prepareToRecord.") } } catch { }
//结束录音或播放之后
guard isOtherAudioPlaying else {
return } do { try AVAudioSession.sharedInstance().setActive(false, with: AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation) } catch {}