Я провел часы сегодня с точно такой же проблемой.Наконец-то у меня есть обходной путь.
Метод #stop освобождает аппаратное обеспечение, но не забывает текущую позицию воспроизведения.
Таким образом, вы можете снова вызвать #play и возобновить воспроизведение по желанию.
Myпредыдущий код был:
[player pause];
...
if ([player isPaused]) { [player play]; }
Это, конечно, не сработало, и воспроизведение успешно возобновилось после того, как приложение вернулось на передний план, как вы уже видели.
Теперь у меня есть что-то вродеэто:
self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }
Взломать, но это работает.Единственным недостатком является то, что #prepareToPlay неявно вызывается для восстановления владения оборудованием воспроизведения, повторным буфером и т. Д., Поэтому может возникнуть задержка воспроизведения - пока я не заметил ни одной.
Также обратите внимание, чтов зависимости от вашей реализации обработка прерываний, таких как телефонные звонки, может быть прервана после вышеуказанного взлома.Прерывания телефонного звонка ведут себя правильно, поэтому при взломе, как указано выше, любой общий код, скорее всего, будет в замешательстве для передачи прерывания.