我的应用委托(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/