iOS - 如何判断本地通知是否导致我的应用程序进入前台?

标签 ios uilocalnotification background-foreground application-state

我的应用委托(delegate)中有代码

    application:didReceiveLocalNotification:

每当我的应用程序在前台时,为该本地通知显示 UIAlertView 的方法。

如果当本地通知到达时我的应用程序在后台,用户将收到通知并能够通过选择它来启动应用程序。在这种情况下,我的应用程序出现在我的应用程序代表的前台

    applicationWillEnterForeground:

被调用。之后,虽然我的 didReceiveLocalNotification 方法再次被调用,导致 UIAlertView 再次出现。但实际上,当应用程序处于后台时用户已经收到该警报,因此理想情况下我不想再次显示该警报。

我可以看到,如果应用程序是由于本地通知而启动的,那么在

    application:didFinishLaunchingWithOptions:

检查 key 启动选项的方法

    UIApplicationLaunchOptionsLocalNotificationKey

了解本地通知是否导致您的应用程序启动,但当您刚刚被用户与本地通知交互带回前台时,似乎没有这种方法可以查明这一点。

检查我的 applicationWillEnterForeground 方法最近是否被调用似乎是解决这个问题的一种 hacky 方法,或者类似于这个问题“iOS how to judge application is running foreground or background?”中给出的答案将允许我检查

    [UIApplication sharedApplication].applicationState

从我的内心

    application:didReceiveLocalNotification:

方法。希望它能早点收到,在这种情况下我的 applicationState 仍不会设置为 UIApplicationStateActive

或者对此有更好的解决方案吗?

干杯

最佳答案

在 AppDelegate 中,您可以在应用程序收到通知时检查应用程序的状态

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIApplicationState state = [application applicationState];
     // check state here 

  if(state ==UIApplicationStateBackground ){

    }

}

关于iOS - 如何判断本地通知是否导致我的应用程序进入前台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009348/

相关文章:

iOS 通过本地通知显示特定的 View Controller

c - 如何将进程移动到前台

ios - 不使用 UILocalNotification 发出警报

iphone - 如何正确地从 Three20 库中删除组件

ios - swift 2 : iOS 8+ How to store latitude/longitude with CoreLocation and stop locating

iphone 开发 : when I analyze my app I have potential leak issue

opencv - 可以沿着对象生成边界框的对象识别算法

ios - opengles在iphone中显示人脸

swift - 多次发送多个通知 (Swift)

iphone - UIApplication beginBackgroundTaskWithExpirationHandler 问题