10

現在バックグラウンドにあるアプリケーションからユーザーが呼び出しているかどうかを検出できる可能性があるかどうかを知りたいです。

または、通話がアプリから開始された場合は、通話が終了したときに通知を受け取ります。

または、それ以上に、どのアプリがフォアグラウンドにあるかを検出する可能性はありますか?
私はこれが可能であるとは思わないが、私は試みなければならなかった... ;-)

任意の情報をいただければ幸いです。

ありがとうございました。

4

2 に答える 2

20

には、呼び出しイベントが発生したときに呼び出されるブロックを渡すことができるCTCallCenterメソッドがあります。callEventHandlerこのブロックでは、CTCallオブジェクトが渡され、を取得できますcallState。そのため、通話が開始または終了したときに通知を受け取り、適切に処理できます。どのアプリケーションが呼び出しを開始したかを取得することはできませんが、呼び出しを行うときにivarを設定すると、呼び出しを行ったのはアプリケーションであることがわかります。

例えば:

CTCallCenter *callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call){
    if (call.callState == CTCallStateDisconnected)
    { 
        //handle disconnect
    }
};

編集:あなたの質問を読み直してください、あなたはあなたが中断されている間にこれらのイベントが欲しいです、正しいですか?それは不可能だと思います。

ドキュメントから:

呼び出しイベントが発生したときにアプリケーションがアクティブである場合、システムはイベントをハンドラーにすぐにディスパッチします。ただし、アプリケーションが一時停止されているときにもコールイベントが発生する可能性があります。一時停止中は、アプリケーションはコールイベントを受信しません。アプリケーションがアクティブ状態を再開すると、アプリケーションが一時停止されている間に発生したコールの状態がいくつ変化しても、状態が変化したコールごとに1つのコールイベントを受け取ります。アプリケーションがアクティブ状態に戻ると、ハンドラーに送信される単一の呼び出しイベントは、その時点での呼び出しの状態を記述します。

于 2010-07-23T16:24:12.623 に答える
8

アプリがバックグラウンドで実行されていて、AVAudioSessionが実行されている場合、電話が受信されたときにAVAudioSessionが中断されたことを通知するコールバックがAVAudioSessionDelegateで受信されます。あなたが得るすべての情報はAFAIKです。

于 2010-07-23T16:24:48.370 に答える