核心电话 - 呼叫事件处理程序

时间:2010-09-16 06:29:30

标签: iphone core-telephony

我希望在应用从后台恢复活动状态后检测呼叫状态。我使用以下代码:

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");

  }

};

现在,当用户在应用程序打开时收到呼叫时,此功能正常。在断开呼叫时,应用程序自动返回到前台,它正确检测到呼叫状态已断开。

但是,如果应用程序在接收呼叫之前是后台接地,那么当应用程序返回到前台时,如果我运行上面的代码,则无法检测到呼叫状态。这令人费解,因为苹果文档声明:

如果您的应用程序在发生调用事件时处于活动状态,系统会立即将事件调度给您的处理程序。但是,在您的应用程序暂停时也可以进行呼叫事件。暂停时,您的应用程序不会收到呼叫事件。当您的应用程序恢复活动状态时,它会为每个更改状态的呼叫接收单个呼叫事件 - 无论您的应用程序暂停时呼叫经历了多少状态更改。当您的应用程序返回活动状态时,发送给您的处理程序的单个调用事件描述了当时调用的状态。

所以我相信,当我的应用程序恢复活动状态并运行调用事件处理程序块时,它应该检测到呼叫刚刚断开。但是,不执行调用事件处理程序块本身,即它跳过所有“if else”条件并退出该块。

有人能说清楚为什么会这样吗?任何帮助将非常感激。感谢。

1 个答案:

答案 0 :(得分:3)

Nathan,您是在每次应用程序到达后台时重新创建CTCallCenter实例吗? 如果是,那么这可能就是问题所在。