2011-07-23 9 views

答えて

4

はい、可能ですが、必ずしもそうである必要はありません。

CoreTelephonyフレームワークと呼ばれる、CTCallCenterクラスを持つフレームワークがあります。このクラスのプロパティの1つはcallEventHandler propertyです。これは電話の状態が変更されたときに起動されるブロックです。例:あなたがこれを行うことができるすべてについて本当に

CTCallCenter *callCenter = ...; // get a CallCenter somehow; most likely as a global object or something similar? 

[callCenter setCallEventHandler:^(CTCall *call) { 
    if ([[call callState] isEqual:CTCallStateConnected]) { 
    //this call has just connected 
    } else if ([[call callState] isEqual:CTCallStateDisconnected]) { 
    //this call has just ended (dropped/hung up/etc) 
    } 
}]; 

。電話番号にアクセスすることはできません。情報の唯一の他の有用な情報は、CTCallの識別子プロパティです。したがって、CTCallオブジェクトを一意に識別します。

注意

このイベントハンドラは、あなたのアプリがフォアグラウンドでない限り、呼び出されないです!アプリがバックグラウンドで電話をかけたり受信したりすると、あなたのアプリが再びアクティブになるまで、イベントハンドラはを起動しません。コールごとにイベントハンドラが1回呼び出されます。は、アプリがバックグラウンドの間に状態を変更しました。

+0

私のアプリが発信コールを発信し、切断イベントを購読している場合、私のイベントハンドラで私のアプリに戻るようにユーザに促すローカルメッセージを送信できますか?または、発信コールが終了した後に、アプリにフォーカスを戻すことの難しさを軽減する方法を知っていますか? – JeremyWeir

-1

いいえ。現在のSDKでは、これはできません。 Appleは、アプリがそのようなフックを持つことを許可しません。

+0

-1が間違っています。 CoreTelephony.frameworkをチェックしてください。 –

+0

Hmm。これについて知りませんでした。私はあなたのアプリがコールに応答して "起きる"ようにすることはできないと思うのは正しいですか?もう一度フォアグラウンドに入る(ユーザー入力による)まで待たなければなりませんか? –

+0

が正しいです。これは、アプリがアクティブなときだけ、そのことが起こったことを知り、それに反応する単純な方法です。 –

1

これらのイベントが発生したときに、アプリにコールバックを受け取ることはできません。

-(void)applicationWillResignActive:(UIApplication *)application{ 
     //our app is going to loose focus since thier is an incoming call 
     [self pauseApp]; 
    } 

    -(void)applicationDidBecomeActive:(UIApplication *)application{ 
      //the user declined the call and is returning to our app 
      [self resumeApp]; 
    } 
+2

これは必ずしも着信があるわけではありません。他のアプリ、通知、またはホームボタンがそれを発します。 –

関連する問題