我正在使用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?
答案 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");
}
}