Вернуть регулировку громкости в звонок устройства iOS после окончания воспроизведения

У меня есть аудио-приложение, которое использует категорию аудиосеанса «Воспроизведение мультимедиа», чтобы разрешить фоновый звук. После инициализации моего аудиосеанса аппаратные кнопки громкости на устройстве iOS управляют громкостью моего аудиосеанса.

Как только воспроизведение звука остановится, я хотел бы вернуть управление звонком телефона аппаратным кнопкам громкости, но моя попытка сделать это путем деактивации аудиосеанса не дает результата.

Вот как я инициализирую и активирую свой аудиосеанс:

AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, 
                                audioRouteChangeListenerCallback, 
                                self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
                        sizeof(sessionCategory),           
                        &sessionCategory);

Вот как я пытаюсь деактивировать аудиосеанс и вернуть управление звонком устройства iOS аппаратным регуляторам громкости:

AudioSessionSetActive(false);

Я знаю по крайней мере одно приложение, которое ведет себя подобным образом (приложение Audible.com для iOS). Кто-нибудь знает, что я делаю не так?


person Seth McFarland    schedule 20.11.2011    source источник
comment
Вы пытались вернуть категорию к окружающей среде?   -  person reddersky    schedule 03.02.2012
comment
Я попытался установить категорию для всего, кроме воспроизведения мультимедиа, безуспешно.   -  person Seth McFarland    schedule 13.03.2012
comment
Интересно, позвольте мне напомнить вам, что воспроизведение звука в iOS требует очень осторожной обработки ошибок. Что OSStatus возвращает AudioSessionSetActive(false);? developer.apple.com/library/ios / # DOCUMENTATION / AudioToolbox /   -  person A-Live    schedule 18.03.2012
comment
OSStatus, возвращаемый AudioSessionSetActive (false), составляет 560030580, что, как я полагаю, является kAudioSessionNotActiveError ('! Act'), что означает, что операция со звуком не удалась, потому что звуковой сеанс вашего приложения не был активен. Однако при использовании регуляторов громкости в это время по-прежнему регулируется громкость звука, а не громкость звонка устройства.   -  person Seth McFarland    schedule 11.04.2012


Ответы (2)


В документации по яблокам я думаю, вам придется фактически удалить слушателя.

Найдите: AudioSessionRemovePropertyListenerWithUserData

http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html.

person trumpetlicks    schedule 30.05.2012
comment
Я попробовал это, безуспешно вызвав следующее: AudioSessionRemovePropertyListenerWithUserData (kAudioSessionProperty_AudioRouteChange, audioRouteChangeListenerCallback, self); - person Seth McFarland; 12.07.2012

Я только что столкнулся с этой проблемой, но я использую 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");
}

Я использую аудиосеанс по умолчанию, BTW.

person Geoff Hom    schedule 31.08.2013