iphone - 确定 UILocalNotification 是在前台还是后台通过应用程序触发的

标签 iphone objective-c ios4 uikit uilocalnotification

收到 UILocalNotification

  1. 当应用程序处于前台时调用方法 application:DidReceiveLocalNotification
  2. 当应用程序在后台运行时,它会打开应用程序,然后调用 application:DidReceiveLocalNotification

我如何确定正在发生这些情况中的哪一种?我想以不同的方式对待他们。

如果应用程序在后台,则用户表示他们想要查看事件。所以在application:DidReceiveLocalNotification我不想再问他们,我只想带他们去参加事件。

但是如果当通知触发并调用 application:DidReceiveLocalNotification 时应用程序在前台,我想询问用户是否要查看该事件。

本质上我会:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

if (appLauncedFromBackground)
  // go to event
else
  // ask if user wants to view event

}

我想过将 bool 值写入 applicationWillEnterForeground:application 内的 NSUserDefault,然后在 application:DidReceiveLocalNotification 内读取并重置它。但我认为如果有一种测试方法,那将是一条更好的路线。

谢谢,马克

编辑 ************ *************** ***

谢谢 xuzhe,但在这种情况下这行不通。这里有一些更详细的信息,可以解释为什么它不起作用,并且可以帮助别人为我回答这个问题:

我在这里设置的 UILocalNotification 是一个类似于日历事件的事件,计划在用户选择的时间触发,因此在安排通知时我不知道用户在通知触发时将要做什么。我正在使用通知的 userInfo 来存储有关已安排事件的数据,但按照建议设置一个像 inBackground 这样的值是行不通的。

我知道如果用户决定他们想要“查看”事件,那将是两种情况之一。 (这一切都假设应用程序在后台或前台并且不退出)。

1 - 如果它在应用程序未被使用时触发 && 该应用程序在后台且未退出,iOS 将通知用户事件已发生并提供一个选项以转到负责的应用程序(这是我的在这种情况下)。那时假设用户说“是的,带我去这个很酷的应用程序”,它将从后台打开应用程序并调用应用程序:DidReceiveLocalNotification,我可以在其中获取所有通知 userInfo。

2 - 当计划的事件发生时,用户碰巧在我的应用程序中。那时 application:DidReceiveLocalNotification 方法再次被调用,然后我可以获得所有通知 userInfo。

但正是在这一点上,我想知道这两个场景中的哪一个刚刚发生了 1 或 2。

希望有关我使用 UILocalNotification 的更多详细信息将有助于回答这个问题。提前致谢 - 标记

结束编辑 ****************************

最佳答案

也许最简单的方法是当您的应用程序处于前台时,不发送 LocalNotification,而只是将您的用户带到事件中。

但如果您坚持使用 LocalNotification 来执行此操作,这里有一种简单的方法来检测 UILocalNotification 触发时应用的状态。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    //[super application:application didReceiveLocalNotification:notification]; // In most case, you don't need this line
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateInactive) {
        // Application was in the background when notification was delivered.
    } else {

    }
}

关于iphone - 确定 UILocalNotification 是在前台还是后台通过应用程序触发的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169110/

相关文章:

iphone - 如何使用 MonoTouch 为 iPhone 更改带有自定义按钮的 UIKeyboard 的返回键?

iphone - 大型自定义 UIView - CABackingStoreUpdate 性能

ios - IPA 文件困惑。如何确定我的 .ipa 文件是否可以在另一台 iPhone 上运行?

iphone - 如何以编程方式进入应用程序商店(从应用程序内)?

ios - 将一个 NSMuatblearray 添加到另一个 NSMutablearray?

ios - 将 GMSMarker 添加到 map 时,应用程序仅在 iPhone 5 上崩溃 : EXC_BAD_ACCESS

iphone - CLLocationmanager "locationServicesEnabled"方法在 iOS 4 中已弃用?

iphone - Xcode 中存档验证期间出现 "The archive is invalid"

ios - RealmSwift - 如何将数据存储在列表中

iphone - 将私钥导入钥匙串(keychain)在 iphone 中无法正常工作