Обнаружение состояния вызова в iOS4 - PullRequest
10 голосов
/ 23 июля 2010

Я хотел бы знать, есть ли возможность определить, находится ли пользователь в вызове, из приложения, которое в данный момент находится в фоновом режиме.

Или получите уведомление о завершении вызова, если вызов был инициирован из моего приложения.

Или, более того, есть ли возможность определить, какое приложение находится на переднем плане?
Я не верю, что это возможно, но я должен был попытаться ...; -)

Любая информация будет оценена.

Спасибо.

Ответы [ 2 ]

20 голосов
/ 23 июля 2010

В CTCallCenter есть метод callEventHandler, который позволяет передавать блок, который будет вызываться при возникновении событий вызова. В этом блоке вам будет передан объект CTCall, и вы можете получить callState. Таким образом, вы можете получить уведомление, когда вызов инициирован или завершен, и обработать его соответствующим образом. Вы не можете узнать, какое приложение инициировало вызов, но если вы установили ivar, когда выполняете вызов, вы можете сказать, что именно ваше приложение осуществило вызов.

Например:

CTCallCenter *callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call){
    if (call.callState == CTCallStateDisconnected)
    { 
        //handle disconnect
    }
};

РЕДАКТИРОВАТЬ: Перечитывая ваш вопрос, вы хотите, чтобы эти события были приостановлены, верно? Я не думаю, что это возможно.

Из документов :

Если ваше приложение активно, когда происходит событие вызова, система немедленно отправляет событие вашему обработчику. Однако события вызова также могут иметь место, пока ваше приложение приостановлено. Пока оно приостановлено, ваше приложение не получает события вызова. Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние - независимо от того, сколько состояний изменяет вызов, возникший во время приостановки вашего приложения. Событие одиночного вызова, отправляемое вашему обработчику, когда ваше приложение возвращается в активное состояние, описывает состояние вызова в тот момент.

8 голосов
/ 23 июля 2010

Если ваше приложение работает в фоновом режиме и запускается AVAudioSession, вы получите обратные вызовы на AVAudioSessionDelegate , сообщающие, что ваша AVAudioSession была прервана при получении телефонного звонка.AFAIK, это вся информация, которую вы получаете.

...