0

通话结束后如何恢复音频。

这是我的代码,但它不工作不知道为什么

@interface MainViewController : UIViewController <InfoDelegate, AVAudioPlayerDelegate> 

在 m 文件中

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)audioPlayer;
{

}
-(void)audioPlayerEndInterruption:(AVAudioPlayer *)audioPlayer;

{
   [self.audioPlayer play];
   }   

任何想法我在代码中做错了什么或遗漏了什么。

请帮忙。

4

1 回答 1

2

根据您的音频停止的方式(您打电话了[self.audioPlayer stop]吗?),您可能需要在再次拨打电话[self.audioPlayer prepareToPlay]之前先拨打电话play

我相信你应该做的是以下几点:

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)audioPlayer;
{
    [self.audioPlayer 暂停];
}

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)audioPlayer;
{
    [self.audioPlayer 播放];
}   

根据我的经验,如果您打电话给stop您,那么您必须先打电话,然后prepareToPlay才能再次打电话play

编辑:

或者,您可能需要直接通过 AudioSession 处理中断。

您的应用程序应该初始化 AudioSession,如下所示:

AudioSessionInitialize(NULL, NULL, AudioInterruptionListener, NULL);

然后,在/块AudioInterruptionListener之外实现,如下所示:@implementation@end

#define kAudioEndInterruption @"AudioEndInterruptionNotification"
#define kAudioBeginInterruption @"AudioBeginInterruptionNotification"

无效的音频中断监听器(
                             无效 *inClientData,
                             UInt32 inInterruptionState
                             )
{
    NSString *notificationName = nil;
    开关(inInterruptionState){
        案例 kAudioSessionEndInterruption:
            通知名称 = kAudioEndInterruption;
            休息;

        案例 kAudioSessionBeginInterruption:
            通知名称 = kAudioBeginInterruption;
            休息;

        默认:
            休息;
    }

    如果(通知名称){
        NSNotification *notice = [NSNotification notificationWithName:notificationName object:nil];
        [[NSNotificationCenter defaultCenter] postNotification:notice];
    }
}

回到您的 Objective-C 中,您需要监听此代码可能发布的通知,如下所示:

// 监听音频中断开始/结束
[[NSNotificationCenter defaultCenter] addObserver:self
                                         选择器:@选择器(开始音频中断:)
                                             名称:kAudioBeginInterruption 对象:无];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         选择器:@selector(endAudioInterruption:)
                                             名称:kAudioEndInterruption 对象:无];

和:

-(void)beginAudioInterruption:(id)context
{
    [self.audioPlayer 暂停];
}

-(void)endAudioInterruption:(id)context
{
    [self.audioPlayer 播放];
}

试一试。:-)

于 2012-05-08T20:45:09.153 回答