web-dev-qa-db-ja.com

iOS現在電話中かどうかを確認する方法

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

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

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

これも可能ですか?

24
friend

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

いずれかの通話が実際に接続されているかどうかを知りたい場合は、現在の通話を繰り返し処理し、callStateをチェックして、それがCTCallStateConnectedであるかどうかを判断する必要があります。

25
ThomasW
#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;
}
27
AlBeebe

答えてくれてありがとう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
            }
        }
    }
}
6
friend

私は同じ問題を抱えていましたが、iOS 1からこれを行う正しい方法は次のとおりだと思います:

func checkForActiveCall() -> Bool {
    for call in CXCallObserver().calls {
        if call.hasEnded == false {
            return true
        }
    }
    return false
}
1
JPetric