una todas rechazar plus nombre llamadas llamada las identificador gratis entrantes con como bloquear ios ios7 avplayer avplayerlayer

ios - todas - AVplayer reanudar después de la llamada entrante



identificador de llamadas gratis (3)

Estoy usando AVPlayer para la reproducción de música. Mi problema es que después de una llamada entrante, el jugador no reanudará. ¿Cómo manejo esto cuando viene una llamada entrante?


A partir de iOS 6 debe manejar AVAudioSessionInterruptionNotification y AVAudioSessionMediaServicesWereResetNotification , antes de esto tenía que usar métodos de delegado.

Primero debe llamar a la estación de audio única de AVAudioSession y configurarla para su uso deseado.

Por ejemplo:

AVAudioSession *aSession = [AVAudioSession sharedInstance]; [aSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:&error]; [aSession setMode:AVAudioSessionModeDefault error:&error]; [aSession setActive: YES error: &error];

Luego debe implementar dos métodos para las notificaciones que llamaría AVAudioSession:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAudioSessionInterruption:) name:AVAudioSessionInterruptionNotification object:aSession];

El primero es para cualquier interrupción que se llamaría debido a una llamada entrante, despertador, etc.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMediaServicesReset) name:AVAudioSessionMediaServicesWereResetNotification object:aSession];

El segundo, si el servidor de medios se reinicia por algún motivo, debe manejar esta notificación para reconfigurar el audio o realizar cualquier tarea de mantenimiento. Por cierto, el diccionario de notificaciones no contendrá ningún objeto.

Aquí hay un ejemplo para manejar la interrupción de reproducción:

- (void)handleAudioSessionInterruption:(NSNotification*)notification { NSNumber *interruptionType = [[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey]; NSNumber *interruptionOption = [[notification userInfo] objectForKey:AVAudioSessionInterruptionOptionKey]; switch (interruptionType.unsignedIntegerValue) { case AVAudioSessionInterruptionTypeBegan:{ // • Audio has stopped, already inactive // • Change state of UI, etc., to reflect non-playing state } break; case AVAudioSessionInterruptionTypeEnded:{ // • Make session active // • Update user interface // • AVAudioSessionInterruptionOptionShouldResume option if (interruptionOption.unsignedIntegerValue == AVAudioSessionInterruptionOptionShouldResume) { // Here you should continue playback. [player play]; } } break; default: break; } }

Tenga en cuenta que debe reanudar la reproducción cuando el valor opcional es AVAudioSessionInterruptionOptionShouldResume

Y para la otra notificación, debe encargarse de lo siguiente:

- (void)handleMediaServicesReset { // • No userInfo dictionary for this notification // • Audio streaming objects are invalidated (zombies) // • Handle this notification by fully reconfiguring audio }

Saludos.


AVAudioSession enviará una notificación cuando comience y finalice una interrupción. Consulte Manejo de interrupciones de audio

- (id)init { if (self = [super init]) { [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(audioSessionInterrupted:) name:AVAudioSessionInterruptionNotification object:nil]; } } - (void)audioSessionInterrupted:(NSNotification *)notification { int interruptionType = [notification.userInfo[AVAudioSessionInterruptionTypeKey] intValue]; if (interruptionType == AVAudioSessionInterruptionTypeBegan) { if (_state == GBPlayerStateBuffering || _state == GBPlayerStatePlaying) { NSLog(@"Pausing for audio session interruption"); pausedForAudioSessionInterruption = YES; [self pause]; } } else if (interruptionType == AVAudioSessionInterruptionTypeEnded) { if ([notification.userInfo[AVAudioSessionInterruptionOptionKey] intValue] == AVAudioSessionInterruptionOptionShouldResume) { if (pausedForAudioSessionInterruption) { NSLog(@"Resuming after audio session interruption"); [self play]; } } pausedForAudioSessionInterruption = NO; } }


En algunos casos mi AVPlayer no reanuda la reproducción incluso si llamo a play() . Solo recargar jugador me ayuda a resolver el problema:

func interruptionNotification(_ notification: Notification) { guard let type = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? UInt, let interruption = AVAudioSessionInterruptionType(rawValue: type) else { return } if interruption == .ended && playerWasPlayingBeforeInterruption { player.replaceCurrentItem(with: AVPlayerItem(url: radioStation.url)) play() } }