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

时间:2012-07-07 17:30:48

标签: objective-c ios cocoa-touch uilocalnotification

所以这就是交易...我需要一种方法来区分我收到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

1 个答案:

答案 0 :(得分:1)

你可以等一下,看看你的州在不久之后是否活跃起来了吗?

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