如何识别电话后是否重新加载应用?

时间:2009-05-26 10:35:11

标签: iphone cocoa-touch phone-call

我有一个程序在程序启动时自动启动电话。这是在AppDelegate的“applicationDidFinishLaunching”方法中实现的。

问题是:当电话结束并且我的应用程序再次自动启动时,它会重新启动该循环并再次启动电话。

如何识别是否从该通话中退回了应用?或者以某种方式轻松保存程序的状态或变量,以定义是否已经进行了调用?

我刚开始进行iPhone编程,这就出现了。

3 个答案:

答案 0 :(得分:3)

这不可能。标志的想法很好,直到你意识到并非所有的电话终止都会让你回到应用程序。例如,如果您通过按顶部电源按钮挂断电话。

对于这些情况,标志将不一致(即,在下次启动时,您的应用程序会认为这是从呼叫返回的,而实际上它是从主屏幕启动的)。

总而言之,没有办法从手机中检测到所有的回复,我已经向Apple开发人员提出了支持。

答案 1 :(得分:1)

在您的应用程序启动电话之前,请先阅读application NSUserDefaults database中的BOOL标志,询问是否应启动该呼叫,例如callWasMade

如果callWasMade设置为初始默认值NO,请将标记设置为YES,将标记的值保存到NSUserDefaults,然后触发电话。

在您的应用程序的后续启动中,callWasMadeYES)的值从NSUserDefaults读取,并且不会触发调用。

此时,将标志的值翻回NO以允许下一次通话应该是安全的。

答案 2 :(得分:0)

您可以使用UIWebview进行如此问题中所述的调用:

Return to app behavior after phone call different in native code than 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");

        }

    };