12

アプリから電話をかけると、通話の終了 (CallStateDisconnected 状態) を検出できません。しかし、アプリがアクティブなときに電話を受けると、その状態を検出できます。また、アプリから通話を開始すると、状態 CTCallStateDialing を 2 回または 3 回受け取ります。以前は iOS5 で動作していましたが、iOS6 でこの問題が発生しました。

私のアプリデルコード;

 self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall* call) {

    // anounce that we've had a state change in our call center
    NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; //BREAKPOINT HERE

    [[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:self userInfo:dict]; 

};

奇妙なことに、callEventHandler ブロックにブレークポイントを配置し、呼び出しが終了した後に実行を再開すると、CallStateDisconnected が正しく取得されます。

次に、View Controller で通知をサブスクライブし、通知を受け取ったら次のコードを実行します。

- (void)ctCallStateDidChange1:(NSNotification *)notification
 {
  NSString *call = [[notification userInfo] objectForKey:@"callState"];


if ([call isEqualToString:CTCallStateDisconnected])
{
    NSLog(@"Call has been disconnected");

}
else if([call isEqualToString:CTCallStateDialing])
{

    NSLog(@"Call start");
}
else if ([call isEqualToString:CTCallStateConnected])
{
    NSLog(@"Call has just been connected");
}
else if([call isEqualToString:CTCallStateIncoming])
{
    NSLog(@"Call is incoming");
}
else
{
    NSLog(@"None");
}

}

次のようにアプリから呼び出します。

        UIWebView *callWebview = [[UIWebView alloc] init];
        [self.view addSubview:callWebview];
        NSURL *telURL = [NSURL URLWithString:number];
        [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];

アプリの状態も記録しました- (void)applicationDidBecomeActive:(UIApplication *)application

通話を開始した後、次に行きます- (void)applicationDidEnterBackground:(UIApplication *)application

通話が終了した後、に戻ります- (void)applicationDidBecomeActive:(UIApplication *)application.

DidBecomeActive呼び出しが行われた後、バックグラウンドに移行する前に呼び出されるのは奇妙ですか?

4

1 に答える 1