Estaba tratando de averiguar qué sucede realmente durante semanas y no tengo idea de por qué no puedo continuar la reproducción después de la interrupción, por lo que probablemente ustedes conozcan una respuesta. AudioSessionSetActive (TRUE) siempre devuelve '! Cat' que es kAudioSessionIncompatibleCategory mientras se reactiva si mi aplicación se reproduce en segundo plano y estoy en una aplicación diferente. Aunque funciona bien y continúa la reproducción si cogí interrupción mientras estaba en mi aplicación.AudioSessionSetActive falla después de la interrupción
El código original en realidad tiene todas las llamadas AudioSession y AudioQueue envueltas en macros que imprimen OSStatus si eso significa un error, pero lo eliminé para una mejor legibilidad. Además, [self pause] simplemente alterna pause, por lo que básicamente llama a AudioQueueStart (audioQueue, NULL) en upause, pero no funciona, por supuesto, si AudioSession falla.
audio código de inicialización de la sesión:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
Interrupción código del controlador:
- (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");
}
}
Este código fuente streamer se puede encontrar aquí https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m si va a ayudar de alguna manera a resolver un problema ..
Como esperaba, no funciona y me da el mismo error de una manera más de moda: "No se pudo establecer la categoría en AVAudioSession. La operación no se pudo completar. (OSStatus error 560161140.)". Trataré de analizar rioInterruptionListener .. Creo que me perdí algo pequeño. – Andy
entonces creo que primero debes probar la cosa en la respuesta de mi pregunta. Pero aquí será demasiado difícil para obtener el problema exacto. Debe identificar dónde 'exactamente' desea modificar el código. esto fue un desafío para mí cuando lo hice ... Mejor suerte para ti ... Espero que puedas resolver el problema ... – DShah