2013-03-19 16 views
5

Odtwarzam pliki dźwiękowe z AVPlayer. Zaimplementowałem AVAudioSessionInterruptionNotification.Jak uzyskać przerwanie zdarzeń początkowych/końcowych dla AVPlayer

AVAudioSession *session = [AVAudioSession sharedInstance]; 
    NSError *errorInAudio = nil; 
    [session setActive:YES error:&errorInAudio]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interruption:) name:AVAudioSessionInterruptionNotification object:nil]; 

    [session setCategory:AVAudioSessionCategoryPlayback error:nil]; 

To działa dobrze, gdy przyszła przerwa, podczas gdy aplikacja jest w planie (np sterowania głosowego).
Ale zrobiłem aplikację w tle i otworzyłem odtwarzacz iPod i zacząłem grać. Jego przerwanie nie jest wywoływane w tym czasie, a nawet gdy moja aplikacja weszła na pierwszy plan.
Jaki może być problem. Proszę pomóż.

Odpowiedz

3

Jeśli używasz AVAudioPlayer możesz odpowiadać AVAudioPlayerDelegate następnie można wdrożyć metody jak - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

Więcej metod wymienionych w docs.

+0

Dzięki za odpowiedź. Mam delegata AVAudioPlayer. Ale chciałbym się dowiedzieć, czy istnieje jakikolwiek sposób wdrożenia tego przy użyciu AVPlayer. Czy możesz zasugerować pomysł? –

+0

Nie mam dużego doświadczenia z AVPlayerem, ale to pytanie dotyczy tego samego problemu: http://stackoverflow.com/questions/6837002/no-avplayer-delegate-how-to-track-when-song-finished -playing-objective-c-iphon –

+0

W każdym razie zmieniam mój AVPlayer na AVAudioPlayer. Dzięki za radę. –

1

Aby otrzymywać powiadomienia, gdy AVPlayer zostanie przerwane w tle można posłuchać powiadomienia o AudioSession

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerStopped) name:AVAudioSessionInterruptionNotification object:nil];