수색…


배경에서라도 앱의 통화 차단하기

Apple 설명서에서

CTCallCenter 클래스를 사용하여 현재 셀룰러 호출 목록을 얻고 다이얼링 상태에서 연결된 상태와 같은 호출에 대한 상태 변경에 응답합니다. 이러한 상태 변화를 셀룰러 호출 이벤트라고합니다.

CTCallCenter의 목적은 개발자에게 통화 중에 앱 상태를 일시 중지하여 사용자에게 최상의 경험을 제공 할 수있는 기회를 제공하는 것입니다.

목표 -C :

먼저, 인터셉션을 처리하고자하는 클래스 내부에 새 클래스 멤버를 정의합니다.

@property (atomic, strong) CTCallCenter *callCenter;

우리의 클래스 init (생성자) 안에서 우리는 클래스 멤버에게 새로운 메모리를 할당 할 것입니다 :

[self setCallCenter:[CTCallCenter new]];

그 후에, 실제로 인터셉트를 처리하는 새로운 메소드를 호출 할 것입니다.

- (void)registerPhoneCallListener
{
[[self callCenter] setCallEventHandler:^(CTCall * _Nonnull call) {
    NSLog(@"CallEventHandler called - interception in progress");

     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");
     }
 }];
}

사용자가 앱을 사용하고 전화를 받게되면이 통화를 가로 채고 앱을 저장 상태로 처리 할 수 ​​있습니다.

인터셉트 할 수있는 4 가지 통화 상태가 있음을 언급 할 가치가 있습니다.

CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected

빠른:

해당 클래스에 반원을 정의하고 정의하십시오.

    self.callCenter = CTCallCenter()
    self.callCenter.callEventHandler = { call in
        //  Handle your interception
        if call.callState == CTCallStateConnected
        {
        }
    }

앱이 백그라운드에 있고 백그라운드에서 앱을 호출하는 동안 통화를 가로채는 경우 어떻게됩니까?

예를 들어 엔터프라이즈 애플리케이션을 개발하는 경우 기본적으로 기능 탭에 2 가지 기능 (VoIP 및 백그라운드 가져 오기)을 추가 할 수 있습니다.

프로젝트 타겟 -> 기능 -> 백그라운드 모드 -> Voice over IP 및 백그라운드 가져 오기

CallKit - ios 10

//Header File

<CallKit/CXCallObserver.h>

CXCallObserver *callObserver = [[CXCallObserver alloc] init];

// If queue is nil, then callbacks will be performed on main queue

[callObserver setDelegate:self queue:nil];

// Don't forget to store reference to callObserver, to prevent it from being released

self.callObserver = callObserver;

// get call status
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
    if (call.hasConnected) {
        // perform necessary actions
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow