3

Apple のドキュメントに関しては、アプリが中断されている間、電話の状態を処理する方法はありません: https://developer.apple.com/documentation/coretelephony/ctcallcenter

「中断されている間、アプリケーションは通話イベントを受信しません」

これは「背景」状態にも当てはまりますか?(バックグラウンド状態は、Apple のドキュメントに記載されている状態に関する「一時停止」アプリの状態と同じではないため)

https://web.archive.org/web/20140824215114/https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

次のコードを使用して電話の状態を処理しています。

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

callCenter.callEventHandler=^(CTCall* call)
{

  //call state

};

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

4

3 に答える 3

4

私が行ったすべてのテストcallEventHandlerは、アプリケーションがバックグラウンドにある場合、使用して受け取ることができません。ただし、アプリケーションがフォアグラウンドにある場合は、すべてうまく機能します。

iOSがアプリ用にソケットを処理し、それに応じてパケットを配信するため、ソケットは機能します。ただし、そのためには、VoIPソケットを作成し、App-Info.plistに追加する必要がありvoipます。UIBackgroundModes

于 2012-09-11T12:56:11.523 に答える
1

を使用してバックグラウンドで通話を監視することはできませんcallEventHandler...

ただし、 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);  
}
于 2016-08-30T14:50:09.043 に答える
0

一部のアプリは無音のオーディオ ファイルをバックグラウンドで実行して、10 分間非アクティブになった後に閉じられないようにしています。

Bluetooth、位置情報、オーディオにより、アプリが完全に強制終了されるのを防ぐことができます。

私のアプリは、バックグラウンドで着信通話と発信通話を検出できます。これは、アプリが位置情報を更新してもアクティブなままであるためです。過去にオーディオ/ブルートゥースを使用しました。

「keepAlive」の何らかの方法がないと、OS は、何らかの外部刺激 (プッシュ通知、ユーザー起動など) によってアプリが再アクティブ化されるまで、アプリを一時停止します。

于 2014-11-13T05:46:28.370 に答える