2012-04-11 4 views
3

バックグラウンド状態に - イベントハンドラを呼び出します http://developer.apple.com/library/ios/#DOCUMENTATION/NetworkingInternet/Reference/CTCallCenter/Reference/Reference.htmlCTCallCenter - アプリが中断されている間、携帯電話の状態を処理する方法はありませんアップルのドキュメントについて

"While it is suspended, your application does not receive call events"

が、これは「バックグラウンド」の状態も同様です?

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

(バックグラウンド状態は、Appleのドキュメントで説明の状態について「中断」アプリの状態と同じではないので)私は、次のコードを使用して携帯電話の状態を処理しています:


CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 

callCenter.callEventHandler=^(CTCall* call) 
{ 

    //call state 

}; 

私のアプリケーションがバックグラウンド状態であるのにブロックが実行されていない継ぎ目です(私のアプリはバックグラウンドでサポートされていて、すべて受信されている間にコールイベントが受信されるかどうかを確認するためにcallEventHandlerブロックにローカル通知を追加しました)アプリがバックグラウンドの間にイベント(TCP経由)が正しく処理される)

助けてください!

おかげ

+0

この上の任意のコメント:ここ

は、あなたが(すべての秒をチェックするために)使用する必要があるコードがありますか?ありがとう –

+0

私はすでに同じ質問に答えて、これをチェックしてください:http://stackoverflow.com/questions/38696151/how-to-get-incoming-outgoing-call-event-in-background-state?answertab=votes# tab-top – presscorp

答えて

4

私は、アプリケーションがバックグラウンドにあるとき、私はcallEventHandlerを使用していずれかを受け取ることができませんやったすべてのテスト。しかし、アプリケーションがフォアグラウンドにあるときは、すべてうまく動作します。

ソケットは、iOSがあなたのためにそれを処理し、それに応じてパックを配信するため動作します。しかし、そのためには、ボックソケットを作成し、App-Info.plistvoipUIBackgroundModesに追加する必要があります。

+0

この目的のために、UIBackgroundModesにVOIPを追加すると、appleがappstoreのためにappを承認するかどうかを確認しますか? –

+0

voipをUIBackgroundModesに追加すると、コールイベントを聞くことができなくなります。アプリが実行されているときにのみイベントが送信されます。 voipはバックグラウンドでもTCPソケットを開いたままにしておくだけです(OSは受信データを処理してアプリケーションを起動させます)。 –

0

私はいくつかのアプリが無音の10分後に閉じられないようにバックグラウンドで音声ファイルを実行することを知っています。

Bluetooth、場所、および音声によって、アプリが完全に削除されるのを防ぐことができます。

私のアプリは、アプリがロケーションの更新を維持しているため、バックグラウンドでの着信と発信の両方を検出できます。私たちは過去にオーディオ/ブルートゥースを使用してきました。 「キープアライブ」のいくつかの方法がなければ

いくつかの外部刺激が再活性化するまで、OSアプリを一時停止します(ETCプッシュ通知、ユーザーの打ち上げ、...)

+0

あなたは深刻ですか?あなたはサイトのソースをお願いできますか? –

+0

私は、iOSのドキュメントで時間を費やすことができます。または、30秒ごとにログを出力し、ロケーションサービスの有無にかかわらずどれくらいバックグラウンドで継続するかを確認するタイマーを実行できます。 – Lytic

1

あなたは電話に内を監視することができませんしかしcallEventHandler ...

を使用してバックグラウンドは、this thread in apple dev forumsによると、あなたは呼び出しが進行中であるかどうかを判断するために、バックグラウンドで定期的にcurrentCallsを確認することができます。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(phoneDetection) userInfo:nil repeats:YES]; 
} 

- (void)phoneDetection { 
    _callCenter = [[CTCallCenter alloc] init]; // Here is the important part : instanciating a call center each time you want to check ! 

    [_callCenter setCallEventHandler:^(CTCall *call) { 
     NSLog(@"Call detected"); 
    }]; 

    NSLog(@"%@", _callCenter.currentCalls); 
} 
関連する問題