Ответ 1
В CTCallCenter
существует метод callEventHandler
, который вы можете передать блоку, который будет вызван при возникновении событий вызова. В этом блоке вы передадите объект CTCall
и можете получить callState
. Таким образом, вы можете получать уведомление, когда вызов инициируется или заканчивается, и обрабатывать его соответствующим образом. Вы не можете получить, какое приложение инициировало вызов, но если вы установили ivar при выполнении вызова, вы можете сказать, что это приложение, которое совершило звонок.
Например:
CTCallCenter *callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call){
if (call.callState == CTCallStateDisconnected)
{
//handle disconnect
}
};
EDIT: перечитав свой вопрос, вы хотите, чтобы эти события были приостановлены, правильно? Я не думаю, что это возможно.
Из docs:
Если ваше приложение активно, когда происходит событие вызова, система отправляет событие в ваш обработчик немедленно. Однако события вызова также могут иметь место, пока приложение приостановлено. Пока он приостановлен, ваше приложение не принимает события вызова. Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние, независимо от того, сколько состояний изменило вызов, когда ваше приложение было приостановлено. Событие одиночного вызова, отправленное вашему обработчику, после вашего приложения, возвращающегося в активное состояние, описывает состояние вызовов в это время.