with play off how iphone ios audio background multitasking

iphone - off - Cómo reanudar AVAudioPlayer después de interrumpirse en el fondo



youtube background ios (2)

Estoy reproduciendo música con AVAudioPlayer en segundo plano. El problema es que si hay una llamada entrante interrumpe al reproductor, nunca se reanudará a menos que cambie al primer plano y lo haga manualmente.

El código es simple, para jugarlo en segundo plano:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; url = [[NSURL alloc] initFileURLWithPath:...]; audio_player = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:NULL]; audio_player.delegate = self; bool ret = [audio_player play];

delegar para manejar interrupciones:

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player { //tried this, not working [[AVAudioSession sharedInstance] setActive: NO error: nil]; NSLog(@"-- interrupted --"); } //----------- THIS PART NOT WORKING WHEN RUNNING IN BACKGROUND ---------- - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player { NSLog(@"resume!"); //--- tried, not working: [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; //--- tried, not working: [[AVAudioSession sharedInstance] setActive: YES error: nil]; //--- tried, not working: [audio_player prepareToPlay]; [audio_player play]; }

¿Alguien puede ayudarme?


Prueba esto

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)audioPlayer withFlags:(NSUInteger)flags{ if (flags == AVAudioSessionFlags_ResumePlay) { [audioPlayer play]; }

Espero eso ayude.


¡Encontré la solución! Tuve el mismo problema, mi aplicación estaba reanudando el audio muy bien después de una interrupción, solo si mi aplicación estaba abierta. Cuando estaba en el fondo, no se pudo reanudar la reproducción del audio después de una interrupción.

Lo arreglé agregando las siguientes líneas de código:

Agregue esta línea cada vez que su aplicación empiece a reproducir audio. [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Y en el método endInterruption, espere 1 o 2 segundos antes de reanudar la reproducción del audio. Esto para permitir que el sistema operativo deje de usar el canal de audio.

- (void)endInterruptionWithFlags:(NSUInteger)flags { // Validate if there are flags available. if (flags) { // Validate if the audio session is active and immediately ready to be used. if (AVAudioSessionInterruptionFlags_ShouldResume) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1), dispatch_get_main_queue(), ^{ // Resume playing the audio. }); } } }

También puede agregar esta línea cuando su aplicación se detenga (no pause) al reproducir audio. Pero no es obligatorio. [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];