3

プログラムの起動時に自動的に電話をかけるプログラムがあります。これは、AppDelegate の「applicationDidFinishLaunching」メソッドで実装されます。

問題は次のとおりです。通話が終了してアプリが自動的に再起動すると、そのループが再開され、通話が再開されます。

アプリがその呼び出しから返されたかどうかを認識する方法は? または、呼び出しが既に行われたかどうかを定義するプログラムの状態または変数を何とか簡単に保存しますか?

iPhoneプログラミングを始めたばかりで、これが思い浮かびました。

4

3 に答える 3

3

これはできません。すべての通話が終了してもアプリに戻るわけではないことに気付くまでは、フラグのアイデアは素晴らしいものです。この一例は、上部の電源ボタンを押して電話を切った場合です。

そのような場合、フラグは一貫性がありません (つまり、実際にはホーム画面から起動されたときに、アプリは次の起動時にこれが呼び出しから戻っていると見なします)。

要約すると、電話からの復帰をすべて検出する方法はなく、Apple dev サポートにこれについて尋ねました。

于 2009-05-27T19:49:43.973 に答える
1

アプリケーションで通話を開始する前に、その通話を開始するかどうかを尋ねるアプリケーションデータベースBOOL内のフラグを読み取ります。NSUserDefaultscallWasMade

callWasMadeが初期デフォルトの に設定されている場合はNO、フラグを に設定しYES、フラグの値を に保存してからNSUserDefaults、電話をかけます。

その後のアプリケーションの起動時にcallWasMade( YES) の値が読み取られNSUserDefaults、呼び出しはトリガーされません。

NOその時点で、次の呼び出しを許可するためにフラグの値を元に戻しても安全です。

于 2009-05-26T10:48:30.773 に答える
0

この質問で説明されているように、UIWebview を使用して電話をかけることができます。

UIWebView とはネイティブ コードが異なる通話後にアプリに戻る動作

コアテレフォニーを使用して、通話が終了したかどうかを確認します。

//before calling loadRequest:
CTCallCenter *callCenter.callEventHandler=^(CTCall* call) {

        if(call.callState == CTCallStateDialing)
        {
            //The call state, before connection is established, when the user initiates the call.
            NSLog(@"Dialing");
        }
        if(call.callState == CTCallStateIncoming)
        {
            //The call state, before connection is established, when a call is incoming but not yet answered by the user.
            NSLog(@"Incoming Call");
        }

        if(call.callState == CTCallStateConnected)
        {
            //The call state when the call is fully established for all parties involved.
            NSLog(@"Call Connected");
        }   

        if(call.callState == CTCallStateDisconnected)
        {
            [self release];
            NSLog(@"Call Ended");

        }

    };
于 2011-09-26T08:32:18.227 に答える