来电后恢复录音?

Posted

技术标签:

【中文标题】来电后恢复录音?【英文标题】:Resume audio recording after incoming call? 【发布时间】:2013-10-24 07:09:18 【问题描述】:

我们正在使用 AVAudioRecorder 录制音频,但是当我们收到任何来电时,录制会停止。如果我们再次尝试恢复录制,那么它将从头开始。我检查了语音备忘录(ios Apple 应用程序)并发现了同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但同样的问题也存在。 那么请帮忙在来电后如何恢复录音?

注意:- 我知道有很多与录音有关的问题但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前致谢。

【问题讨论】:

请向我们提供任何小提示或非常有用的链接。 你能得到这篇文章的解决方案吗? 【参考方案1】:

在 iOS 中可以在来电后恢复录音。这背后的基本概念是使用 AVAudioSessionAudioQueue ,当您收到来电时在您的设备上,它会发出 kAudioSessionBeginInterruption 并在断开呼叫时收到 kAudioSessionEndInterruption......在收到来电时,只需暂停音频队列,然后[[AVAudioSession sharedInstance]setActive:NO er​​ror:nil]; ......然后在 kAudioSessionEndInterruption 上,当通话结束时,只需恢复暂停的队列和 [[AVAudioSession sharedInstance]setActive:YES error:nil];

这样就可以了……我已经成功运行程序,接到来电后可以继续录音……

希望对你有所帮助.......

【讨论】:

问题是,如果您拒绝来自 iphone 的呼叫,则它会重置为 0。当您停止来自呼叫方的呼叫时很好。【参考方案2】:

Apple 将AVAudioSessionInterruption 观察者解释为一种处理中断的新方法。 Apple 在 this 页面用 Swift 解释它,但对于搜索 Objective-c 代码的人来说,这个 github issue 一定很有用。

您需要处理音频中断,例如

AVAudioSession *session = [AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(audioSessionInterruptionNotification:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:session];

您的音频会话中断通知 AVAudioSessionInterruptionNotification 类似于

-(void)audioSessionInterruptionNotification:(NSNotification*)notification 

NSString* seccReason = @"";

//Check the type of notification, especially if you are sending multiple AVAudioSession events here
NSLog(@"Interruption notification name %@", notification.name);

if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) 
    seccReason = @"Interruption notification received";

    //Check to see if it was a Begin interruption
    if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) 
        seccReason = @"Interruption began";

     else if([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeEnded]])
        seccReason = @"Interruption ended!";
        //Resume your audio
    


您需要编写处理代码,然后才能开始和结束中断。

【讨论】:

【参考方案3】:

使用 AVFoundation 委托方法,

-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder

    [audiorecorder pause];

-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder

    [audiorecorder record];
 

【讨论】:

它不工作,它将开始另一个录音。

以上是关于来电后恢复录音?的主要内容,如果未能解决你的问题,请参考以下文章

在 android 7 的通话录音中听不到来电?

电话录音服务仅记录来电者的声音。 (安卓)

Android通话录音未录制来电语音

Android初级教程实现电话录音

录音盒那家 支持二次开发,并且可以电脑上可以批量拨号,耳麦通话的?

android 10 (2019) 可以恢复语音通话录音吗?