所以这是交易......我需要一种方法来区分我收到的应用程序状态UILocalNotification
。
有一种情况对我来说我不明白。那就是当应用程序当前在前台运行并且用户拉下通知中心(iOS 5)时,应用程序将被调用applicationWillResignActive:
,这是完全合乎逻辑的,因为当通知中心将显示在它上面时它不会处于活动状态。但我怀疑它也会applicationDidEnterBackground:
在它退出活动后立即被调用,但它没有。因此,当我在通知中心收到 UILocalNotifications 时,我的应用程序将尝试处理它们application:didReceiveLocalNotification:
但是当我点击通知中心列表中我的应用程序的通知时,我的应用程序将处理这个通知,就像我在通知中心收到它时一样。所以我只能以一种方式处理这些通知,但我需要以两种方式处理它们。
那么我该如何区分这两种情况:
当应用程序处于前台并且用户已拉下
通知中心并且我在此期间收到通知时
(UIApplicationState = UIApplicationStateInactive
)当应用程序处于前台并且用户已拉下
通知中心并主动
从列表中选择我的应用程序的通知之一时 ( )UIApplicationState =
UIApplicationStateInactive
编辑:
我用 00 秒的时间戳存储我的所有通知。所以在里面application:didReceiveLocalNotification:
我可以检查当前时间[NSDate date]
,看看秒是否大于 00?这意味着触发通知的不是 iOS,而是通知中心的用户。这当然取决于通知实际上将由 iOS 以这种及时的方式传递的事实。如果 iOS 将在 01 秒发送通知,我的逻辑就会中断。但为了它,我只是做了一些日志记录,以查看 iOS 何时发送我的通知,似乎从控制台的输出判断,通知实际上是以毫秒精度 (+/- 1) 准时发送的。当然,您无法将连接到计算机的开发设备与现实世界的场景进行比较。
2012-07-08 10:09:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:10:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:11:00.788 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:12:00.790 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:13:00.790 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:14:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:15:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running