IOS音频中断

时间:2011-09-13 20:37:21

标签: ios audio interruption

我正在使用Matt的旧AudioStreamer开发一个音频流应用程序,我正试图通过使用以下方式进行中断(接听电话时):

- (void)MyAudioSessionInterruptionListener(void *inClientData, UInt32 inInterruptionState)
{
        AudioStreamer *streamer = (AudioStreamer*)inClientData;
        if (inInterruptionState == kAudioSessionBeginInterruption)
        {
            [streamer stop];    
            NSLog(@"kAudioSessionBeginInterruption");
        }
        else if (inInterruptionState == kAudioSessionEndInterruption)
        {
            [self playpause]; 
            NSLog(@"kAudioSessionEndInterruption");
        }
}

我的问题是我试图用[self playpause]调用函数“playpause”;但我得到一个错误,因为未申报!

如何在MyAudioSessionInterruptionListener中声明playpause?

2 个答案:

答案 0 :(得分:1)

它不是[self playPause]它应该是[streamer playpause],假设AudioStreamer类是带有方法的类...监听器方法是类外的静态C函数,因此你不能在self上调用方法,因为self意味着你在类的实例中。如果具有该方法的类不是AudioStreamer,那么您将不得不在inClientData参数中传递该类,以便能够获取它...

希望有所帮助

答案 1 :(得分:-2)

因此,在测试了所有可能性后,最好的是使用通知。

这里是代码:

void MyAudioSessionInterruptionListener(void *inClientData, UInt32 inInterruptionState)
{
if (inInterruptionState == kAudioSessionBeginInterruption) {


    [[NSNotificationCenter defaultCenter] postNotificationName:@"stopstreamer" object:nil];

    NSLog(@"kAudioSessionBeginInterruption");
}


else if (inInterruptionState == kAudioSessionEndInterruption) {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"TogglePlayPause" object:nil];

    NSLog(@"kAudioSessionEndInterruption");
}


}