收到 UILocalNotification
时
- 当应用程序处于前台时调用方法
application:DidReceiveLocalNotification
。 - 当应用程序在后台运行时,它会打开应用程序,然后调用
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/