AVAudioSession endInterruption() returns an NSOSStatusErrorDomain

泪湿孤枕 提交于 2019-12-02 02:06:05

I solved the problem changing the way to design my audio code. Instead of use AVAudioSession and its delegate methods, I change to the C style to work with audio.

I implemented the function:

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) {}

And it was initialized with:

AudioSessionInitialize (NULL, NULL, interruptionListenerCallback, self);

inside my -(id) init method.

Hope it helps you also. Best.

"If this delegate method receives the AVAudioSessionInterruptionFlags_ShouldResume constant in its flags parameter, the audio session is immediately ready to be used."

You didn't handle the callback correctly. When you receive AVAudioSessionInterruptionFlags_ShouldResume, your audio session is ALREADY ready to use. You need to call setActive when you get a DIFFERENT flag.

Hope it helps...

Using @Trinca answer that what I did on "ARC'ed" project:

AudioSessionInitialize (NULL, NULL, interruptionListenerCallback, (__bridge void *)(self.player));

Were self.player is your player instance that you pass to the callback function.

Then implement the callback:

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) {
   NSLog(@"itnerp state %li",interruptionState);
   NSLog(@"inUserData %@",inUserData);
   AVAudioPlayer *pl = (__bridge AVAudioPlayer*)inUserData;
   switch (interruptionState) {
    case 0:
        [pl play];
    break;

    case 1:
        [pl pause];
    break;
   }

}

GOOD LUCK

Shani

use audiosession.setmode if it is voip

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!