3

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

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

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

我刚开始 iPhone 编程,结果就出现了。

4

3 回答 3

3

这是无法做到的。在您意识到并非所有呼叫终止都会将您返回到应用程序之前,标志的想法很好。例如,如果您按下顶部电源按钮挂断电话。

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

所以总而言之,没有办法检测到手机的所有返回,我已经询问了 Apple 开发支持。

于 2009-05-27T19:49:43.973 回答
1

在让您的应用程序启动电话呼叫之前,请在应用程序数据库BOOL中读取一个标志,询问它是否应该启动该呼叫,例如.NSUserDefaultscallWasMade

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

在您的应用程序随后启动时,会读取callWasMade( ) 的值,并且不会触发调用。YESNSUserDefaults

此时,将标志的值翻转回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 回答