Подтвердить что ты не робот

IOS Как проверить, действительно ли на телефоне

Я смотрю вокруг, и все, что я могу найти, это проверить callState CTCallCenter. Однако это работает, слушая событие, которое в зависимости от того, активно/приостановлено/возобновлено приложение, событие может быть поднято в разное время.

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

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

Возможно ли это?

4b9b3361

Ответ 1

Объект CTCallCenter имеет свойство currentCalls, которое представляет собой NSSet текущих вызовов. Если есть вызов, то свойство currentCalls должно быть!= Nil.

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

Ответ 2

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

-(bool)isOnPhoneCall {
    /*

     Returns TRUE/YES if the user is currently on a phone call

     */

    CTCallCenter *callCenter = [[[CTCallCenter alloc] init] autorelease];
    for (CTCall *call in callCenter.currentCalls)  {
        if (call.callState == CTCallStateConnected) {
            return YES;
        }
    }
    return NO;
}

Ответ 3

Спасибо за ответ ThomasW. Я думал, что также отправлю код.

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    CTCallCenter *ctCallCenter = [[CTCallCenter alloc] init];
    if (ctCallCenter.currentCalls != nil) 
    {
        NSArray* currentCalls = [ctCallCenter.currentCalls allObjects];
        for (CTCall *call in currentCalls)
        {   
            if(call.callState == CTCallStateConnected)
            {
                // connected
            }
        }
    }
}