Воспроизведение музыки на заднем плане: AVAudioSessionInterruptionNotification не срабатывает
Мое приложение хорошо играет в фоновом режиме. Пауза и воспроизведение также работают хорошо, даже мое приложение работает в фоновом режиме, используя методы, зарегистрированные для AVAudioSessionInterruptionNotification
,
В проблему поступают шаги по сценарию:
- Запустите мое приложение -> фоновая музыка из моего приложения играет хорошо
- Запустите музыкальное приложение Apple и играйте. AVAudioSessionInterruptionNotification сработал.
- Когда я приостанавливаю музыкальное приложение или убиваю музыкальное приложение. AVAudioSessionInterruptionNotification не запускается
Код: я делаю это в appdelegate. didfinishlaunching
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error: nil];
self.player = [[AVQueuePlayer alloc] initWithURL:[NSURL URLWithString:@"http://someurl.com:8040/;stream.mp3"]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAudioSessionEvent:) name:AVAudioSessionInterruptionNotification object:nil];
- (void) onAudioSessionEvent: (NSNotification *) notification
{
//Check the type of notification, especially if you are sending multiple AVAudioSession events here
NSLog(@"Interruption notification name %@", notification.name);
if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {
NSLog(@"Interruption notification received %@!", notification);
//Check to see if it was a Begin interruption
if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) {
NSLog(@"Interruption began!");
} else if([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeEnded]]){
NSLog(@"Interruption ended!");
//Resume your audio
NSLog(@"Player status %i", self.player.status);
// Resume playing the audio.
[self.player play];
}
}
}
3 ответа
У меня была похожая проблема с прерываниями. iOS: Siri недоступна, не возвращает AVAudioSessionInterruptionOptionShouldResume
Завершается использованием applicationWillResignActive и applicationDidBecomeActive.
Есть свойство вашего экземпляра AVCaptureSession: @property(nonatomic) BOOL использует ApplicationAudioSession
По умолчанию это YES, просто установите NO и будет работать нормально.
Попробуйте добавить объект: сессия
[[NSNotificationCenter defaultCenter] addObserver: собственный селектор:@selector(onAudioSessionEvent:) имя:AVAudioSessionInterruptionNotification объект:[AVAudioSession sharedInstance]];