Я не могу обнаружить конец вызова (состояние 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
вызывается после вызова и перед тем, как идти в фоновый режим?