Базовая телефония - обработчик событий вызова
Я хочу определить состояние вызова после того, как мое приложение возобновит активное состояние из фона. Я использую следующий кусок кода для этого:
CTCallCenter *callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call)
{
if (call.callState == CTCallStateDisconnected)
{
NSLog(@"Call has been disconnected");
}
else if (call.callState == CTCallStateConnected)
{
NSLog(@"Call has just been connected");
}
else if(call.callState == CTCallStateConnected)
{
NSLog(@"Call is incoming");
}
else
{
NSLog(@"None of the conditions");
}
};
Теперь это работает нормально, когда, скажем, пользователь получает вызов, когда приложение открыто. После отключения вызова приложение автоматически возвращается на передний план и правильно обнаруживает, что состояние вызова отключено.
Однако, если приложение было фоновым до получения вызова, то, когда приложение возвращается на передний план, если я запускаю вышеуказанный фрагмент кода, оно не может определить состояние вызова. Это озадачивает, потому что в документации Apple говорится, что:
Если ваше приложение активно, когда происходит событие вызова, система немедленно отправляет событие вашему обработчику. Однако события вызова также могут иметь место, пока ваше приложение приостановлено. Пока оно приостановлено, ваше приложение не получает события вызова. Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние - независимо от того, сколько состояний изменяет вызов, возникший во время приостановки вашего приложения. Одиночное событие вызова, отправляемое вашему обработчику, когда ваше приложение возвращается в активное состояние, описывает состояние вызова в это время.
Поэтому я считаю, что, когда мое приложение возобновляет активное состояние и я запускаю блок обработчика события вызова, оно должно обнаружить, что вызов был только что отключен. Однако сам блок обработчика события вызова не выполняется, то есть он пропускает все условия "если еще" и выходит из блока.
Кто-нибудь может пролить свет на то, почему это происходит? Любая помощь приветствуется. Благодарю.
1 ответ
Натан, вы воссоздаете экземпляр CTCallCenter каждый раз, когда приложение переходит в фоновый режим? Если да, то это может быть проблемой.