AVAudioPlayer продолжает играть после многозадачности - PullRequest
1 голос
/ 19 июня 2011

У меня есть приложение, которое воспроизводит музыку в фоновом режиме во время игры, которое поддерживает многозадачность.Когда я нажимаю кнопку «Домой», на applicationWillResignActive вызывается действие.Это поднимает экран паузы и ставит игру на паузу.НО, когда я внедрил музыку в игру, все пошло не так.Я использовал AVAudioPlayer для воспроизведения моей фоновой музыки.Когда вызывается applicationWillResignActive, в том же действии, которое вызывает экран паузы, музыка получает паузу.Но когда вы возвращаетесь в приложение через многозадачность, экран паузы по-прежнему отображается так, как должен, но музыка также продолжает воспроизводиться.Я пытался во многих местах остановить музыку, но она отказывается останавливаться.Даже после смены взглядов музыка все равно играет.Это совершенно не отвечает.

Это очень расстраивает.Пожалуйста, помогите!

1 Ответ

3 голосов
/ 23 июня 2011

Я провел часы сегодня с точно такой же проблемой.Наконец-то у меня есть обходной путь.
Метод #stop освобождает аппаратное обеспечение, но не забывает текущую позицию воспроизведения.
Таким образом, вы можете снова вызвать #play и возобновить воспроизведение по желанию.

Myпредыдущий код был:

[player pause];
...
if ([player isPaused]) { [player play]; }

Это, конечно, не сработало, и воспроизведение успешно возобновилось после того, как приложение вернулось на передний план, как вы уже видели.

Теперь у меня есть что-то вродеэто:

self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }

Взломать, но это работает.Единственным недостатком является то, что #prepareToPlay неявно вызывается для восстановления владения оборудованием воспроизведения, повторным буфером и т. Д., Поэтому может возникнуть задержка воспроизведения - пока я не заметил ни одной.

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

...