使用AVAudioSession
录制音频时,来自音乐应用或其他应用的音频播放会停止。在音频会话文档中描述了这一点:
AVAudioSessionCategoryRecord
用于录制音频;此类别会静音播放音频。
是否有方法可以更改此行为并执行以下操作之一?
1)继续播放其他应用程序的音频并允许手机记录正在播放的音频。
2)在简短的录制完成后恢复其他应用程序的音频。当音频中断开始或结束时,应用程序可以响应通知。其他应用程序接收这些通知必须执行特定的操作吗?
使用AVAudioSession
录制音频时,来自音乐应用或其他应用的音频播放会停止。在音频会话文档中描述了这一点:
AVAudioSessionCategoryRecord
用于录制音频;此类别会静音播放音频。
是否有方法可以更改此行为并执行以下操作之一?
1)继续播放其他应用程序的音频并允许手机记录正在播放的音频。
2)在简短的录制完成后恢复其他应用程序的音频。当音频中断开始或结束时,应用程序可以响应通知。其他应用程序接收这些通知必须执行特定的操作吗?
经过24小时的努力搜索和拼凑,这其实非常简单:
let session = AVAudioSession.sharedInstance()
session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers, .allowBluetoothA2DP])
对于仍在寻找如何完成此操作的任何人,这就是全部内容。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
或者
Swift
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord,
with: AVAudioSessionCategoryOptions.mixWithOthers)
} catch let error as NSError {
print("audioSession error: \(error.localizedDescription)")
}
1) 对于AVAudioSession
来说是不可能的。你所能做的就是检查[[AVAudioSession sharedInstance] isOtherAudioPlaying]
并询问用户是否想停止音乐流。
2) 当iPod状态改变时,应用程序无法接收任何通知,我们甚至不能观察isOtherAudioPlaying属性... 我在我的项目中使用的解决方案是添加一个NSTimer,并每秒钟检查一次[[AVAudioSession sharedInstance] isOtherAudioPlaying]
BOOL值。