如果我从我的应用程序发起呼叫,则无法检测到通话结束(状态为CallStateDisconnected)。但是,如果我的应用程序处于活动状态时接收到呼叫,我可以检测到该状态。当呼叫从我的应用程序开始时,我还会两三次接收到状态CTCallStateDialing。这在iOS5下曾经有效,但在iOS6中出现了问题。
我的应用程序代理代码:
self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall* call) {
// anounce that we've had a state change in our call center
NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; //BREAKPOINT HERE
[[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:self userInfo:dict];
};
奇怪的是,如果我在callEventHandler块中设置断点并在调用完成后恢复执行,则可以正确获取CallStateDisconnected。然后我在我的视图控制器中订阅通知,并在接收到它们时执行此代码:- (void)ctCallStateDidChange1:(NSNotification *)notification
{
NSString *call = [[notification userInfo] objectForKey:@"callState"];
if ([call isEqualToString:CTCallStateDisconnected])
{
NSLog(@"Call has been disconnected");
}
else if([call isEqualToString:CTCallStateDialing])
{
NSLog(@"Call start");
}
else if ([call isEqualToString:CTCallStateConnected])
{
NSLog(@"Call has just been connected");
}
else if([call isEqualToString:CTCallStateIncoming])
{
NSLog(@"Call is incoming");
}
else
{
NSLog(@"None");
}
}
我从我的应用程序中这样发起电话:
UIWebView *callWebview = [[UIWebView alloc] init];
[self.view addSubview:callWebview];
NSURL *telURL = [NSURL URLWithString:number];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
我还记录了应用程序状态,然后获得 - (void)applicationDidBecomeActive:(UIApplication *)application
在我开始通话之后,我进入- (void)applicationDidEnterBackground:(UIApplication *)application
通话结束后返回到- (void)applicationDidBecomeActive:(UIApplication *)application。
DidBecomeActive
在通话发生之后、进入后台之前被调用,这很奇怪吗?