Как получить событие вызова, используя CTCallCenter: setCallEventHandler: это произошло, когда приложение было приостановлено?

Документация для CTCallCenter: setCallEventHandler: заявляет, что:

Однако события вызова также могут иметь место, пока ваше приложение приостановлено. Пока оно приостановлено, ваше приложение не получает события вызова. Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние

Часть, относящаяся к этому вопросу

Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние

Подразумевается, что приложение получит событие вызова для вызова, который произошел в прошлом, пока приложение было приостановлено. И это возможно согласно ответу на этот вопрос:Как приложение Navita TEM получает информацию из журнала вызовов?

У меня такой вопрос: если мое приложение приостановлено и происходит вызов, то когда мое приложение возобновляет активное состояние, как оно может извлечь событие вызова для состоявшегося вызова?

Я пробовал много, много экспериментов с кодом, но не смог получить информацию о вызовах, когда мое приложение возобновило активное состояние.

Это самая простая вещь, которую я пробовал: 1) Создать новый проект, используя шаблон приложения Xcode для одного представления. 2) Добавьте код, показанный ниже, в didFinishLaunchingWithOptions 3) Запустите приложение 4) Задайте его из приложения 5) Выполните вызов с другого устройства, ответьте на вызов, повесьте вызов с любого из устройств 6) Переведите приложение на передний план тем самым возобновляя активное состояние.

Код для регистрации на события вызова:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
        self.callCenter = [[CTCallCenter alloc] init];
        [self.callCenter setCallEventHandler:^(CTCall *call)
         {
             NSLog(@"Event handler called");
             if ([call.callState isEqualToString: CTCallStateConnected])
             {
                 NSLog(@"Connected");
             }
             else if ([call.callState isEqualToString: CTCallStateDialing])
             {
                 NSLog(@"Dialing");
             }
             else if ([call.callState isEqualToString: CTCallStateDisconnected])
             {
                 NSLog(@"Disconnected");

             } else if ([call.callState isEqualToString: CTCallStateIncoming])
             {
                 NSLog(@"Incomming");
             }
         }];  

    return YES;
}

С помощью этого кода я могу получать события вызова, если приложение находится на переднем плане, когда происходит вызов. Но если я выполняю задание вне приложения перед выполнением вызова, то я не могу получить событие вызова, когда мое приложение в следующий раз возобновляет активное состояние - как указано в документации Apple.

Другие вещи, которые я пробовал:

1) В документации говорится, что объект блока отправляется в очередь глобальной диспетчеризации с приоритетом по умолчанию, поэтому я попытался поместить регистрацию setCallEventHandler вdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{})

2) Вызов setCallEventHandler: в appBecameActive вместо didFinishLaunchingWithOptions

3) Добавление фоновых возможностей в приложение - через beginBackgroundTaskWithExpirationHandler и / или обновления местоположения с помощью startUpdatingLocation или startMonitoringForSignificantLocationChanges.

4) Различные комбинации вышеперечисленного.

Вознаграждение будет присуждено, как только я получу код, запущенный на моем устройстве, который сможет получать события вызовов, которые произошли, пока приложение было приостановлено.

Это на iOS 7.

Ответы на вопрос(2)

Ваш ответ на вопрос