CallStateDisconnected обнаруживается только для входящих вызовов, а не для вызовов, сделанных из моего приложения

Я не могу определить конец вызова (состояние CallStateDisconnected), если я звоню из своего приложения. Но если я получаю вызов, когда мое приложение активно, я могу обнаружить это состояние. Я также получаю состояние CTCallStateDialing дважды или 3 раза, когда вызов начинается из моего приложения. Раньше он работал под 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 вызывается после вызова и до перехода в фоновый режим?


person DixieFlatline    schedule 25.11.2012    source источник
comment
Он по-прежнему работает на iOS 5, я только что попробовал и увидел, что и запуск вызова, и вызов были отключены. Переходы между состояниями appDelegate также были разумными. Не могу попробовать это на iOS 6 до завтра.   -  person emrys57    schedule 03.12.2012
comment
Я был бы очень полезен, если бы вы завтра попробовали это на iOS6. Спасибо   -  person DixieFlatline    schedule 03.12.2012
comment
Когда вы запускаете его без точки останова, что регистрируется по сравнению с точкой останова? Я знаю, что если вы подождете, пока вызов не будет завершен, чтобы возобновить работу, ваше приложение получит только одно обновление (в данном случае вызов отключен), иначе вы получите их все. Вы просто постоянно получаете Call start, ничего или что без точки останова? Вы уведомлены обо всем, кроме состояния отключения?   -  person Metabble    schedule 03.12.2012
comment
Регистрируется только начало вызова без точки останова, а также начало вызова и вызов был отключен с вызовом, остановленным во время приостановки выполнения (точка останова).   -  person DixieFlatline    schedule 03.12.2012


Ответы (1)


Вот журнал с телефона iOS 5:

2012-12-02 22:00:00.252 TestPhone[2297:707] didFinishLaunchingWithOptions:
2012-12-02 22:00:00.352 TestPhone[2297:707] applicationDidBecomeActive:
2012-12-02 22:00:06.708 TestPhone[2297:707] applicationWillResignActive:
2012-12-02 22:00:10.582 TestPhone[2297:1c03] Call start
2012-12-02 22:00:11.016 TestPhone[2297:707] applicationDidBecomeActive:
2012-12-02 22:00:12.536 TestPhone[2297:707] applicationWillResignActive:
2012-12-02 22:00:12.564 TestPhone[2297:707] applicationDidEnterBackground:
2012-12-02 22:00:36.543 TestPhone[2297:707] applicationWillEnterForeground:
2012-12-02 22:00:36.769 TestPhone[2297:707] applicationDidBecomeActive:
2012-12-02 22:00:36.840 TestPhone[2297:2e07] Call has been disconnected
2012-12-02 22:00:36.854 TestPhone[2297:707] applicationWillResignActive:
2012-12-02 22:00:49.885 TestPhone[2297:707] applicationDidBecomeActive:

и вот журнал с телефона iOS 6:

2012-12-03 06:27:55.401 TestPhone[7734:907] didFinishLaunchingWithOptions:
2012-12-03 06:27:55.462 TestPhone[7734:907] applicationDidBecomeActive:
2012-12-03 06:28:01.396 TestPhone[7734:907] applicationWillResignActive:
2012-12-03 06:28:04.345 TestPhone[7734:907] applicationDidBecomeActive:
2012-12-03 06:28:04.401 TestPhone[7734:1803] Call start
2012-12-03 06:28:05.824 TestPhone[7734:907] applicationWillResignActive:
2012-12-03 06:28:05.826 TestPhone[7734:907] applicationDidEnterBackground:
2012-12-03 06:28:17.318 TestPhone[7734:907] applicationWillEnterForeground:
2012-12-03 06:28:17.329 TestPhone[7734:907] applicationDidBecomeActive:

Сообщение "отключено" просто исчезло. (Это не ответ, это наблюдение.)

Вот код, который я использовал. Я создал приложение с одним представлением в xcode с одной кнопкой в ​​xib, и это весь мой UIViewController:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.callCenter = [[CTCallCenter alloc] init];
    self.callCenter.callEventHandler = ^(CTCall* myCall) {
        NSString *call = myCall.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");
    };
}

- (IBAction)callButtonPressed:(id)sender {
    NSString *number = @"tel:01234567890";
    UIWebView *callWebview = [[UIWebView alloc] init];
    callWebview.frame = self.view.frame;    
    [self.view addSubview:callWebview];
    NSURL *telURL = [NSURL URLWithString:number];
    [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
}
@end
person emrys57    schedule 03.12.2012
comment
и сообщение в 22:00:36.854 было вызвано, когда на телефоне появилось окно Ваш оставшийся кредит... - person emrys57; 03.12.2012
comment
Спасибо за наблюдение. Мой телефон на ios6 ведет себя так же. Является ли это ошибкой iOS6 и следует ли сообщать об этом Apple? - person DixieFlatline; 03.12.2012
comment
Да, это не похоже на то. Я добавил свой вариант вашего кода в свой ответ. Не стесняйтесь отправлять это в Apple, если это поможет. - person emrys57; 03.12.2012
comment
@DixieFlatline, вы получили какой-нибудь ответ? - person Gal; 06.02.2013
comment
Да, вчера я получил это: это продолжение ошибки с идентификатором № 12796040. Эта ошибка была закрыта как повторяющаяся. Проблема отслеживается под исходным идентификатором ошибки № 12522984, который также указан в разделе «Связанные проблемы» вашего отчета об ошибке. Чтобы проверить статус исходного отчета об ошибке, посетите раздел «Связанная проблема» в представлении «Подробности проблемы» вашей закрытой повторяющейся ошибки. - person DixieFlatline; 06.02.2013