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