如何识别,如果应用程序是电话后重装?
-
05-09-2019 - |
题
我有一个程序,它会自动启动,当程序被启动的电话。这在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
,然后触发该电话呼叫。
在随后推出的应用程序,callWasMade
(YES
)的值从NSUserDefaults
读取和调用不会被触发。
在这一点上,它应该是安全的翻转标志的值回NO
,让下一个电话。
其他提示
这不能完成。直到你意识到,并非所有的呼叫终止返回到应用程序的标志的想法是很好的。这方面的一个例子是,如果您挂断由按通话顶部的电源按钮。
对于这些情况,该标志将是不一致的(即在下次启动您的应用程序会认为这是从调用返回的时候,其实它是从主屏幕启动)。
所以总结就没有办法来检测从手机全部回报,我也问过这个苹果开发的支持。
您可以使用一个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");
}
};