Верните регулятор громкости на устройство iOS после завершения воспроизведения
У меня есть аудио приложение, которое использует категорию аудио сеанса Media Playback, чтобы разрешить фоновое аудио. Как только мой аудио сеанс инициализирован, аппаратные кнопки громкости на устройстве iOS управляют громкостью моего аудио сеанса.
Как только воспроизведение звука остановится, я бы хотел вернуть управление звонком телефона назад к аппаратным кнопкам громкости, но моя попытка сделать это путем деактивации аудиосеанса не работает.
Вот как я инициализирую и активирую свой аудио сеанс:
AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,
self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory),
&sessionCategory);
Вот как я пытаюсь отключить аудио сеанс и вернуть управление звонком устройства iOS обратно к аппаратным регуляторам громкости:
AudioSessionSetActive(false);
Есть по крайней мере одно приложение, о котором я знаю, которое ведет себя таким образом (приложение iOS от Audible.com). Кто-нибудь знает, что я могу делать не так?
2 ответа
Я только столкнулся с этой проблемой, но я использую AVAudioPlayer. Если я попытался деактивировать сеанс сразу после вызова play, это не сработало. Но ожидание audioPlayerDidFinishPlaying: успешно: и затем выполнение этого работало:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error;
BOOL wasSuccessful = [audioSession setActive:NO error:&error];
NSLog(@"wasSuccessful: %@", wasSuccessful ? @"Yes" : @"No");
}
Я использую аудио сеанс по умолчанию, кстати.
В документации на яблоки я думаю, что вам действительно придется удалить слушателя.
Посмотрите: AudioSessionRemovePropertyListenerWithUserData