我有一个程序在程序启动时自动启动电话。这是在AppDelegate的“applicationDidFinishLaunching”方法中实现的。
问题是:当电话结束并且我的应用程序再次自动启动时,它会重新启动该循环并再次启动电话。
如何识别是否从该通话中退回了应用?或者以某种方式轻松保存程序的状态或变量,以定义是否已经进行了调用?
我刚开始进行iPhone编程,这就出现了。
答案 0 :(得分:3)
这不可能。标志的想法很好,直到你意识到并非所有的电话终止都会让你回到应用程序。例如,如果您通过按顶部电源按钮挂断电话。
对于这些情况,标志将不一致(即,在下次启动时,您的应用程序会认为这是从呼叫返回的,而实际上它是从主屏幕启动的)。
总而言之,没有办法从手机中检测到所有的回复,我已经向Apple开发人员提出了支持。
答案 1 :(得分:1)
在您的应用程序启动电话之前,请先阅读application NSUserDefaults
database中的BOOL
标志,询问是否应启动该呼叫,例如callWasMade
。
如果callWasMade
设置为初始默认值NO
,请将标记设置为YES
,将标记的值保存到NSUserDefaults
,然后触发电话。
在您的应用程序的后续启动中,callWasMade
(YES
)的值从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");
}
};