该应用程序会录制音频,并应在中断(例如电话)时停止录制音频,然后在电话结束时恢复录制音频。
当有电话时,应用程序当前会注册,但是当我挂断电话时,应用程序不会注册中断已经结束。 (我没有其他应用程序打开)。
请参阅我的ViewController中的以下代码。
func audioRecorderBeginInterruption(recorder: AVAudioRecorder){
print("* * * * * * * inside begin interruption")}
func audioRecorderEndInterruption(recorder: AVAudioRecorder, withFlags flags: Int) {
// THIS NEVER PRINTS, EVEN WHEN PHONE IS HUNG UP
print("* * * * * * * inside end interruption")
}
我也尝试过处理通知中断,但是仍然没有处理.Ended,除非我接到电话而拒绝通话。请参阅我的AppDelegate中的代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let center = NSNotificationCenter.defaultCenter()
center.addObserver(self,
selector:"sessionInterrupted:",
name:AVAudioSessionInterruptionNotification,
object:AVAudioSession.sharedInstance()) //self.myViewController.audioSession)
return true
}
func sessionInterrupted(notification: NSNotification){
if let typeValue = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? NSNumber{
if let type = AVAudioSessionInterruptionType(rawValue: typeValue.unsignedLongValue){
if type == .Began{
print("interruption: began")
} else{
// THIS ALSO NEVER PRINTS
print("interruption: ended")
}
}
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
MixWithOthers
,这可能有助于恢复播放音频,但在我的情况下无法恢复录制音频
我目前的假设是,“结束”中断仅用于中断,例如当您接到电话时,您拒绝接听电话,但不是因为如果您实际接听电话,请稍微说话,然后挂断。我的猜测是,如果不使用越狱手机,就无法检测后一种情况。
在这里以更广泛的方式扩展:iOS AVAudioSession interruption notification not working as expected
此假设似乎已在DropVox's FAQ中验证:
一次只有一个应用程序可以控制音频。如果DropVox正在录制 另一个应用程序控制,这被称为“中断” 中断结束了,DropVox才有可能恢复 记录它是否在前景7,这就是我们提醒的原因 使用“在后台录制”设置。
我可以通过使用routing来检测正在使用的麦克风来处理中断。但我不认为我可以在后台重新激活录音,所以一旦应用程序回到前台,我就会这样做。
是吗?
答案 0 :(得分:-2)
不要在#warning
函数中激活音频!
当电话呼叫到达时,系统拥有音频会话,此时如果您在applicationWillResignActive:/applicationDidBecomeActive:
功能中调用功能[[AVAudioSession sharedInstance] setActive:YES error:&error]
,您的应用将拥有音频会话(实际上它应该是失败的电话时主动发送音频,但我不知道它为什么会返回真实状态,并且不会收到结束中断。