#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?
И у вас плохая реализация методов делегирования. Смотрите Документы
- (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];