我有一个程序,它会自动启动,当程序被启动的电话。这在AppDelegate中的 “的applicationDidFinishLaunching” -method实现。

问题是:当电话通话结束,我的应用程序会自动启动一次,它将重新启动该循环和电话再次启动

如何识别,如果应用程序是从调用返回?或以某种方式轻松节省定义如果呼叫已经取得的状态或程序的变量?

我刚开始iPhone编程,这走了过来。

有帮助吗?

解决方案

为您的应用程序启动电话之前,请在的BOOL标志https://stackoverflow.com/questions/789404/iphone-how-to-save-user-settings-from-application / 789661#789661" >应用NSUserDefaults数据库,询问是否应该启动该呼叫,如callWasMade

如果callWasMade设置为NO的初始默认值,则设置标记,以YES,保存该标志的值,以NSUserDefaults,然后触发该电话呼叫。

在随后推出的应用程序,callWasMadeYES)的值从NSUserDefaults读取和调用不会被触发。

在这一点上,它应该是安全的翻转标志的值回NO,让下一个电话。

其他提示

这不能完成。直到你意识到,并非所有的呼叫终止返回到应用程序的标志的想法是很好的。这方面的一个例子是,如果您挂断由按通话顶部的电源按钮。

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

所以总结就没有办法来检测从手机全部回报,我也问过这个苹果开发的支持。

您可以使用一个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");

        }

    };
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top