当用户接受任何通话时,iPhone应用程序会关闭。通话结束后,应用程序将恢复。
我希望在应用程序在通话结束后恢复时捕获该事件。无论我怎么试过: 在App代表: - (void)applicationWillTerminate:(UIApplication *)应用程序 - (void)applicationDidFinishLaunching :( UIApplication *)应用程序 - (void)applicationDidBecomeActive:(UIApplication *)应用程序 - (void)applicationWillResignActive:(UIApplication *)application
在视图加载上: viewDidLoad中 viewWillAppear中
但不发生上述事件。不知道我怎么知道用户在接到电话后回来了。
答案 0 :(得分:2)
首次收到呼叫时,系统会显示来电对话框时,会向应用代表发送applicationWillResignActive:
消息。
如果用户拒绝来电,则应用代表会收到applicationDidBecomeActive
消息,该应用可以恢复。
如果用户接受了该呼叫,则该应用代理会收到applicationWillTerminate
消息,您应该准备该应用以进行关闭。 Then the system shuts down the app.
调用完成后,您无法强制系统重新启动应用。
如果在委托中没有调用这些方法,最可能的解释是您没有正确分配委托。
听起来您可能会将您的应用委托与其中一个视图控制器混淆。应用程序委托不应该响应'viewDidLoad'和其他UIViewController消息。
Edit01:
在第二次阅读时,听起来您希望应用程序恢复退出之前的状态以响应接听电话。
如果是这样,你真的不想陷入事件。当应用程序在呼叫后重新启动时,它不会收到特殊事件,即它会像用户启动时一样启动。我认为您需要做的是在关闭之前保存应用程序的状态,然后在下次启动时重置为该状态。
答案 1 :(得分:0)
TechZen是正确的 - 没有特殊的框架处理恢复电话后。如果要检测到这一点,则需要在应用程序关闭时保留一些状态信息,然后在应用程序恢复时检查它。
执行此操作的一种方法是使用在applicationWillResignActive中设置的标志(例如,bIncomingEventInterrupt = YES)和applicationDidResignActive(bIncomingEventInterrupt = NO)和applicationDidBecomeActive(bIncomingEventInterrupt = NO)。然后在applicationWillTerminate中检查此标志的状态。
如果有来电,则该标志将设置为true。如果用户接受了该呼叫,则应用将使用flag = YES关闭,并且您应该保留一些属性列表等,其中包含您在应用启动时检查的信息(applicationDidFinishLaunching)。如果用户拒绝该调用,则该标志将被重置为false,然后应用程序应在关闭期间调用一些默认的非持久代码。您可以/应该在didFinishLaunching或willTerminate“non-persist”分支中清除持久数据。