Если это в Apple DOC, то я не смог его найти - надеясь, что кто-то может помочь:
Мое приложение время от времени воспроизводит короткие аудиоклипы - я хочу, чтобы звук смешивался со звуком, воспроизводимым из других приложений в фоновом режиме, таких как приложение iPod, - но я также хочу, чтобы оно продолжало воспроизводить эти аудиоклипы, когда приложение работает в фон.
Я установил «Приложение воспроизводит аудио» в настройках «Необходимые фоновые режимы» в файле info.plist (приложение также использует службы определения местоположения, так что оно тоже там установлено)
Мое приложение настраивает аудиосеанс для приложенияDidFinishLaunching:
AudioSessionInitialize (NULL,NULL,NULL,NULL);
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,sizeof (sessionCategory),&sessionCategory);
AudioSessionSetActive(true);
В моем viewWillAppear: метод в активном представлении у меня есть:
[super viewWillAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
и соответствующий обработчик события и код endReceivingRemoteControlEvents в viewWillDisappear: как обсуждалось в iOS 4: пульты дистанционного управления для фонового звука
Наконец, у меня есть AVAudioPlayer, настроенный обычным способом, который воспроизводит звук при определенных событиях
bool successful = [avAudioPlayer play];
if(!successful)
NSLog(@"did not play");
Когда приложение находится на переднем плане, приложение работает нормально и воспроизводит звук, но когда приложение переходит в фоновый режим и приложение пытается воспроизвести звук, возвращаемое значение из [avAudioPlayer play] равно NO, и звук не воспроизводится - при переключении на передний план звук снова начинает работать.
Если при настройке сеанса я вместо этого использую
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
Тогда звук отлично воспроизводится на переднем и заднем плане. Но MediaPlayback - не совсем подходящий режим для этого приложения, поскольку я только время от времени воспроизводю аудиоклипы - AmbientSound - действительно тот режим, который мне следует использовать.
Чего мне не хватает? Разве нельзя использовать kAudioSessionCategory_AmbientSound для воспроизведения аудио в фоновом режиме? Если так, я не нашел ничего в документации об этом.