AVAudioRecorder 中断委托方法没有被调用
Posted
技术标签:
【中文标题】AVAudioRecorder 中断委托方法没有被调用【英文标题】:AVAudioRecorder interruption delegate methods not getting called 【发布时间】:2014-09-02 20:04:51 【问题描述】:我正在使用AVAudiosession
和AVAudioRecorder
在我的应用程序中录制音频。不幸的是,当我在录音时接到电话时,我的应用程序冻结了。我尝试为中断实现 AVAudioRecorder
委托方法,但它们没有被调用。我有一个视图控制器,用户与之交互以启动和停止录制过程,以及一个包含AVAudioRecorder
的单独录制器控制器。
我在我的记录器控制器中实现了以下功能:
@interface OSRecordPlayController : NSObject <AVAudioRecorderDelegate, AVAudioPlayerDelegate, AVAudioSessionDelegate>
-(void) audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
if(recorder.recording)
[recorder stop];
[self stopRecording];
[self moveViewsDown];
interruptedDuringRecording = YES;
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder withOptions:(NSUInteger)flags
if(interruptedDuringRecording)
[recorder prepareToRecord];
[recorder record];
interruptedDuringRecording = NO;
-(void)setUpAudioFile
self.recorder = [[AVAudioRecorder alloc] initWithURL:self.audioFileURL settings:audioSettings error:nil];
self.recorder.delegate = self;
self.recorder.meteringEnabled = YES;
[self.recorder prepareToRecord];
为什么不调用这些?我为两者都设置了一个断点,但我没有击中它们。我已经看过很多没有可靠答案的问题,所有旧答案都是针对AVAudioSession
委托中断方法,但这些已被弃用。
【问题讨论】:
AVAudioPlayer and AVAudioRecorder: Delegate Methods not Called的可能重复 【参考方案1】:使用通知而不是委托。 它在 Swift 中。
NSNotificationCenter.defaultCenter().addObserver(self,
selector:"sessionInterrupted:",
name:AVAudioSessionInterruptionNotification,
object:myRecorder)
【讨论】:
嘿 Gene,你会在代码的什么地方写这个?在我的记录器控制器中? 您的对象错误:它应该是nil
或AVAudioSession.sharedInstance()
。你不会从你的录音机收到任何东西。【参考方案2】:
如果 AVAudioRecorder 对象在录制完成之前被垃圾收集,可能会导致不调用委托方法。如果没有其他对象保留对记录器的引用,就会发生这种情况。
当然,我并没有愚蠢地犯那个错误,我自己……真的……
【讨论】:
以上是关于AVAudioRecorder 中断委托方法没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?
AVAudioSessionInterruptionNotification 后 AVAudioRecorder 未恢复