Как возобновить фоновую музыку после исходящего телефонного звонка (iOS)?

#iphone #audio #background #resume

#iPhone #Аудио #фон #возобновить

Вопрос:

Я использую AVAudioPlayer для воспроизведения музыки (поддерживается фоновый режим). Мой вопрос в том, хочу ли я позвонить кому-нибудь во время прослушивания музыки, как возобновить ее после звонка? Я реализовал метод делегирования AVAudioPlayer:

 - (void)audioPlayerEndInterruption:(AVAudioPlayer *)thePlayer {
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [self.player play];
}
 

но это не позволит продолжить воспроизведение музыки.

Я также пытался использовать метод AVAudioSessionDelegate (просто попробуйте):

 - (void)viewDidLoad {
    [[AVAudioSession sharedInstance] setDelegate:self];
}

- (void)endInterruption
{
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [self.player play];
}
 

но опять же, это не приведет к возобновлению воспроизведения музыки. Есть идеи о том, как решить эту проблему?

Ответ №1:

странно из вашего кода то, что вы говорите, что используете AVAudioPlayer, почему вы тогда реализуете AVAudioSessionDelegate?

И у вас плохая реализация методов делегирования. Смотрите Документы

из AVAudioPlayerDelegate:

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags

Поэтому попробуйте реализовать их таким образом, и это должно работать правильно

Комментарии:

1. Марек, я внедрил первый опубликованный вами метод делегирования — (void)audioPlayerEndInterruption:(AVAudioPlayer *)player, но это не работает.

Ответ №2:

На iOS приложение не может начать воспроизведение звука, когда оно уже работает в фоновом режиме. Если звук вашего приложения остановлен из-за того, что приложение переднего плана получило контроль над аудиосессией, (в настоящее время) нет способа вернуть его обратно.

Ответ №3:

Вы можете возобновить его. После завершения аудиосеанса вы должны уведомить другое приложение о том, что мое приложение деактивирует аудиосеанс, и вы можете им воспользоваться. Используйте следующий код.

 [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:amp;error];