AudioSessionSetActive не работает после прерывания

Я пытался выяснить, что на самом деле происходит в течение нескольких недель, и я понятия не имею, почему я не могу продолжить воспроизведение после прерывания, так что, вероятно, вы, ребята, знаете ответ. AudioSessionSetActive (TRUE) всегда возвращает '! Cat', который является kAudioSessionIncompatibleCategory при повторной активации, если мое приложение воспроизводится в фоновом режиме, а я нахожусь в другом приложении. Хотя он работает нормально и продолжает воспроизведение, если я обнаружил прерывание во время нахождения в моем приложении.

В исходном коде все вызовы AudioSession и AudioQueue заключены в макросы, которые выводят OSStatus, если это означает ошибку, но я удалил его для лучшей читаемости. Кроме того, [self pause] просто переключает паузу, поэтому в основном он вызывает AudioQueueStart (audioQueue, NULL) при upause, но, конечно, не работает, если AudioSession не удается.

Код инициализации аудиосессии:

AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);

Код обработчика прерывания:

- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState 
{
    if(inInterruptionState == kAudioSessionBeginInterruption)
    {

        NSLog(@"+Interruption"); 

        if(self.state == NX_STATE_PLAY) 
        {
            [self pause];
            AudioSessionSetActive(FALSE);

            isPausedByInterruption = YES;
        }
    }
    else if(inInterruptionState == kAudioSessionEndInterruption) 
    {
        if(isPausedByInterruption) 
        {
            AudioSessionSetActive(TRUE);
            [self pause];

            isPausedByInterruption = FALSE;
        }

        NSLog(@"-Interruption");
    }
}

Исходный код этого стримера можно найти здесь https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes /NxAudioStreamer.m, если это поможет как-то решить проблему ..

8
задан Ben Sinclair 4 November 2011 в 08:01
поделиться