25

周りを見回したところ、CTCallCenter の callState を確認するだけでした。ただし、これはイベントをリッスンすることで機能します。アプリケーションがアクティブ/一時停止/再開されているかどうかに応じて、イベントが異なる時間に発生する可能性があります。

私が必要としているのは、イベントをリッスンして通話が接続されたときに通知を受けるのではなく、通話が接続されているかどうかをいつ尋ねるかを自分で決めたいということです。

ユース ケース: 電話が接続されたとき - ユーザーはアプリ アイコンを知っており、常にクリックしてアプリを開きます。現時点では、現在通話中かどうかを確認するための簡単な関数を実行したいだけです。

これは可能ですか?

4

4 に答える 4

28

CTCallCenterオブジェクトには、現在の呼び出しのプロパティcurrentCallsがあります。NSSet呼び出しがある場合、currentCallsプロパティは != nil である必要があります。

呼び出しのいずれかが実際に接続されているかどうかを知りたい場合は、現在の呼び出しを反復処理し、接続されているかどうかを確認するcallState必要がCTCallStateConnectedあります。

于 2012-06-08T02:31:19.143 に答える
27
#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;
}
于 2012-10-29T06:09:43.477 に答える
6

答えてくれてありがとう 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
            }
        }
    }
}
于 2012-06-08T06:38:14.097 に答える