iOS – 需要区分应用程序中的UILocalNotification:didReceiveLocalNotification:

所以这是交易…我需要一种方法来区分我收到UILocalNotification应用程序状态。

有一种情况对我来说我不明白。 这是当应用程序当前在前台运行并且用户拉下通知中心(iOS 5)时,应用程序将被称为applicationWillResignActive:这是完全合乎逻辑的,因为当通知中心将显示在它上面时它将不会处于活动状态。 但是我怀疑applicationDidEnterBackground:在它已经重新激活后会被调用, 它没有。 因此,当我在通知中心收到UILocalNotifications时,我的应用会尝试在application:didReceiveLocalNotification:处理它们application:didReceiveLocalNotification:但是当我点击通知中心列表中我的应用程序的通知时,我的应用程序将同样处理此通知我在通知中心收到它的方式。 所以我只能用一种方式处理这些通知,但我需要以两种方式处理它们。

那么我如何区分这两种情况:

  • 当应用程序在前台并且用户已拉下时
    通知中心和我在此期间收到通知
    UIApplicationState = UIApplicationStateInactive

  • 当应用程序在前台并且用户已拉下时
    通知中心并主动选择我的应用程序之一
    来自列表的通知( UIApplicationState =
    UIApplicationStateInactive
    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 

你可以等一下,看看你的州后来不久就开始活跃了吗?

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