【问题标题】:Weird functioning of Application event in iPhoneiPhone中应用程序事件的奇怪功能
【发布时间】:2010-12-22 00:28:57
【问题描述】:

当用户接听任何电话时,iPhone 应用程序会关闭。通话结束后,应用程序将恢复。

我想在通话结束后应用恢复时捕获该事件。但是我尝试过: 在应用委托上: - (void)applicationWillTerminate:(UIApplication *)application - (void)applicationDidFinishLaunching:(UIApplication *)application - (void)applicationDidBecomeActive:(UIApplication *)application - (void)applicationWillResignActive:(UIApplication *)application

视图加载时: viewDidLoad ViewwillAppear

但上述事件均未发生。不知道我怎么知道用户在接到电话后回来了。

【问题讨论】:

标签: iphone


【解决方案1】:

当第一次收到呼叫时,应用委托会在系统显示来电对话框时发送applicationWillResignActive: 消息。

如果用户拒绝呼叫,应用代理会收到applicationDidBecomeActive 消息,并且应用可以恢复。

如果用户接听电话,应用委托会收到applicationWillTerminate 消息,您应该准备关闭应用。 Then the system shuts down the app.

您无法在通话完成后强制系统重新启动您的应用。

如果委托中没有调用这些方法,最可能的解释是您没有正确分配委托。

听起来您可能会将您的应用程序委托与您的视图控制器之一混淆。应用程序委托不应响应“viewDidLoad”和其他 UIViewController 消息。

编辑01:

在第二次阅读时,听起来您希望应用恢复到退出之前的状态以响应接听电话。

如果是这样,您并不是真的想要捕获事件。当应用程序在通话后重新启动时,它不会收到特殊事件,即它会像用户启动它一样启动。我认为您需要做的是在关闭之前保存应用程序的状态,然后在下次启动时重置为该状态。

【讨论】:

  • 感谢您的回答,我想在通话结束后应用恢复时捕获该事件
  • 通话结束后无法捕捉事件,只能捕捉用户拒绝接听电话的事件。在后一种情况下,您想要的方法是“applicationDidBecomeActive”。如果该方法从未被调用,那么您的委托设置不正确。
  • 正确,这就是我使用“奇怪”的原因。当呼叫结束我的应用程序重新启动但没有任何单个事件被触发但是如果我在 viewDidLoad 上运行任何计时器,它会继续运行..我可以在计时器方法中编写任何逻辑来了解用户是否在收到呼叫后到来
  • NSTimer 是不寻常的对象。它们不是由创建它们的对象保留,而是由应用程序本身的 NSRunLoop 保留。因此,当其他对象消失时,计时器可以保持活动状态。您是说即使在通话期间退出应用程序,计时器也会继续运行?
【解决方案2】:

TechZen 是正确的——调用后没有特殊的框架处理简历。如果您想检测到这一点,您需要在应用关闭时保留一些状态信息,然后在应用恢复时进行检查。

执行此操作的一种方法是使用在 applicationWillResignActive(例如,bIncomingEventInterrupt = YES)和 applicationDidResignActive(bIncomingEventInterrupt=NO)和 applicationDidBecomeActive(bIncomingEventInterrupt=NO)中设置的标志。然后在 applicationWillTerminate 检查这个标志的状态。

如果有来电,该标志将被设置为真。如果用户接受呼叫,应用程序将在 flag=YES 的情况下关闭,并且您应该保留一些属性列表等,其中包含您在应用程序启动时检查的信息 (applicationDidFinishLaunching)。如果用户拒绝呼叫,该标志将被重置为假,然后应用程序应在关闭期间调用一些默认的非持久代码。您可以/应该在 didFinishLaunching 或 willTerminate “非持久”分支中清理持久数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多