4

所以这是交易......我需要一种方法来区分我收到的应用程序状态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
4

1 回答 1

1

您能否等着看您的状态是否会在不久之后变为活动状态?

当您在第二种情况下收到本地通知时,您的应用程序将在您收到回调后立即变为活动状态(因为用户选择返回您的应用程序)。那么,如何存储您的本地通知并在 50 毫秒后对其进行操作(例如);如果您的应用程序状态此时处于活动状态,则用户从通知中心选择了您的应用程序。

于 2012-07-07T21:05:56.020 回答