Есть много вопросов, связанных с воспроизведением фоновой музыки в iOS на StackOverflow. Никто не может полностью изучить все краевые дела, цель этот вопрос должен быть последним словом в фоновом звуковом вопросе о Иос
Определения и допущения
Весь код, вопросы и примеры относятся к ios5.
"background" . Состояние, в которое приложение вводится, когда пользователь нажимает кнопку "домой" или кнопку питания (поэтому устройства отображают экран блокировки). Приложение можно также использовать в фоновом режиме, используя многозадачный коммутатор или жесты многозадачности на iPad.
"audio" - Аудио воспроизводится с использованием AudioQueue (включая AVAudioPlayer)
Необходимые условия
Как я понимаю, есть 2 требования к приложению для воспроизведения аудио в фоновом режиме.
- Установите
UIBackgroundModes
вaudio
вInfo.plist
-
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
Требования
В моем случае используется относительно длинный звук в фоновом режиме (музыка). Есть потенциально сотни треков, и приложение будет воспроизводить их последовательно. Можно считать, что звук будет проигрываться бесконечно.
Приложение будет обрабатывать прерывания, приостанавливая воспроизведение.
Вопросы
У меня был смешанный успех:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:...];
Разрешение воспроизведения звука в фоновом режиме. Но я смущен, если это необходимо и как оно отличается:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
Пограничные случаи
-
Перерывы. Если вы зарегистрируетесь, чтобы получать уведомления о прерываниях звука (телефонные звонки и т.д.), Став делегатом
AVAudioPlayer
. Например, если вы приостанавливаете или останавливаете свой звук, когда прерывание начинается и возобновляется, когда оно заканчивается, ваше приложение приостановлено, если прерывание превышает 10 минут (максимальное время, разрешенное для выполнения фоновых задач)? -
Симулятор остановит звук при вызове Lock или Home при использовании:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
Однако это работает на устройстве. Это известная проблема?