【发布时间】:2010-09-16 06:29:30
【问题描述】:
我希望在我的应用从后台恢复活动状态后检测通话状态。我为此使用以下代码:
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”条件并退出该块。
谁能解释为什么会这样?任何帮助将非常感激。谢谢。
【问题讨论】:
-
如果你想在后台监控通话,最好的办法是成为一个后台应用程序(例如注册一个后台模式,
location)并定期检查callCenter.currentCalls。在此处查看我的答案以获取更多详细信息:stackoverflow.com/questions/10102108/….
标签: iphone core-telephony