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