Как я узнаю, что прерывание звука завершилось без получения AVAudioSessionInterruptionTypeEnded?

Я использую AVAudioSession в своем приложении VOIP (также используя CallKit). Я понимаю, что сеанс может быть прерван рядом причин, например вторым входящим звонком. Apple указывает внизу этой страницы: https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/HandlingAudioInterruptions/HandlingAudioInterruptions.html#//apple_ref/doc/uid/TP40007875-CH4-SW5

«Примечание. Нет гарантии, что прерывание начала будет иметь соответствующее прерывание окончания. Ваше приложение должно знать о переключении в активное состояние или о нажатии пользователем кнопки воспроизведения. В любом случае определите, должно ли ваше приложение повторно активировать его аудиосеанс».

На указанной странице есть пример для частного случая, когда пользователь игнорирует входящий вызов и в этом случае отправляется AVAudioSessionInterruptionTypeEnded.

Но что мне делать, чтобы знать, когда прерывание закончилось во всех остальных случаях (в каких случаях я никогда не получу AVAudioSessionInterruptionTypeEnded)? (Например, когда пользователь отвечает на второй звонок и ставит меня на удержание, а позже завершает второй звонок?)

Спасибо!


person Zoltan Toth    schedule 20.06.2017    source источник


Ответы (1)


Я помню, когда вы используете CallKit, ни одно приложение, использующее аудио, например музыку, не будет прерывать ваше приложение, за исключением других приложений voip или собственных вызовов. В этом случае ваш вызов будет завершен/удержан в соответствии с вашим ответом в пользовательском интерфейсе комплекта вызовов (если ваш вызов не поддерживается на удержании, вам не будет показана эта кнопка принять и удерживать) ---- Затем вы можете получить обратный вызов из методов делегата CallKit.

API-интерфейс прерывания работает только тогда, когда CallKit не используется, а приложение CallKit имеет более высокий приоритет в аудиосеансе, чем те, которые его не используют.

person user3349433    schedule 20.06.2017