2012-06-08 18 views
22

私は周りを見回しており、私が見つけることができるのはCTCallCenterのcallStateを確認することだけです。しかし、これは、アプリケーションがアクティブ/サスペンド/レジュームされているかどうかに応じて、イベントを聞いて動作します。iOS現在電話中かどうかを確認する方法

私はイベントを聴くのではなくで、通話が接続されている場合、私は時にコールが接続されている場合は依頼する自分自身を決定したい言われてしまった必要なもの。

ユースケース:通話が接続されているとき - ユーザーが知っていて、常にアプリアイコンをクリックするとアプリが開きます。現時点では、私はちょうど現在コール中かどうかを確認するためのクイック機能を実行したい。

これも可能ですか?

答えて

24

CTCallCenterオブジェクトは、現在の呼び出しのNSSetであるcurrentCallsプロパティを持ちます。呼び出しがある場合、currentCallsプロパティは!= nilでなければなりません。

コールが実際に接続されているかどうかを知りたい場合は、現在の通話を繰り返し、CTCallStateConnectedであるかどうかを確認するためにcallStateをチェックする必要があります。

+0

私は感謝を必要とするだけで何...素晴らしいです。あなたがこの質問が助けになると思うならば、質問をアップアップしてください。 ''(CTCall ctCallCenter.currentCallsで*コール){...}のために: – friend

+0

uはあなたが速い列挙体を使用して、このコードをたくさん短縮することができ –

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 
      } 
     } 
    } 
} 
+2

私の命を救いました。 'nil'をチェックしたり、配列を配列に変換する必要はありません。 – omz

+0

あなたはあなたのコードを次にオムズを提案できますか?私は、それは単にのポストを奉する場合は、あなたの答えをupvoteと..歓声OMZ多くは、より効率的かつ効果的であることよりも幸せになります。 – Pavan

+0

正確に何が必要なのですか? upvoted! @AlBeebe:currentCallsは次の行で使用されます。 – rockstarberlin

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; 
} 
+1

これは、iOS 9.xのためのXcode 7で構築するときに機能していないと思われます –

関連する問題