サーチ…


バックグラウンドからでもあなたのアプリからの通話を傍受する

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
        {
        }
    }

あなたのアプリがバックグラウンドにあり、アプリがバックグラウンドにあるときにコールを傍受する必要がある場合はどうなりますか?

たとえば、 エンタープライズアプリケーションを開発する場合、基本的にCapabilitiesタブに2つの機能(VOIPとBackground Fetch)を追加するだけです:

プロジェクトのターゲット - >機能 - >背景モード - >ボイスオーバー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