我在我的应用程序代理中有一些代码
application:didReceiveLocalNotification:
当我的应用程序在前台运行时,显示本地通知的方法是使用UIAlertView。如果我的应用程序在后台运行时收到本地通知,则用户将收到通知并可以通过选择它来启动应用程序。在这种情况下,我的应用程序将进入前台,并调用App Delegate。
applicationWillEnterForeground:
这被称为“本地通知”。然后,我的 didReceiveLocalNotification 方法再次被调用,导致 UIAlertView 再次出现。但实际上,当应用程序在后台时,用户已经收到了该警报,因此最好不要再次显示此警报。
我可以看到,如果应用程序由于本地通知而启动,则在
application:didFinishLaunchingWithOptions:
使用该方法可以检查键的启动选项
UIApplicationLaunchOptionsLocalNotificationKey
要知道本地通知是否导致了应用程序的启动,但当您只是通过与本地通知交互而被带回前台时,似乎没有找到这样的方法来查找它。检查我的
applicationWillEnterForeground
方法是否最近被调用似乎是解决这个问题的一个hacky方法,或者可能类似于在这个问题 "iOS如何判断应用程序在前台还是后台运行?"中给出的答案将允许我检查。 [UIApplication sharedApplication].applicationState
在我的内部
application:didReceiveLocalNotification:
方法。希望它能够早些被接收,这样在这种情况下我的applicationState仍然不会被设置为UIApplicationStateActive。
或者还有更好的解决方案吗?
干杯