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