【问题标题】:iOS - Need to distinguish UILocalNotification in application:didReceiveLocalNotification:iOS - 需要区分应用程序中的 UILocalNotification:didReceiveLocalNotification:
【发布时间】:2012-10-14 11:56:46
【问题描述】:

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

【问题讨论】:

    标签: objective-c ios cocoa-touch uilocalnotification


    【解决方案1】:

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

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

    【讨论】:

    • 我已经尝试过充实它。如果还不清楚,请告诉我。
    • 啊哈!这是一个聪明的方法。我想到了另一种方法,因为我使用 00 秒的时间戳存储通知,所以我可以在收到通知时检查时间戳。您认为更“安全”和更优雅的方式是什么?
    • 我猜本地通知在实际使用中可能会显着延迟(如果设备处于低功耗状态等)。此外,用户也可以在 00 打开您的通知(并且可能会,大约每 60 次他们会打开通知)。
    • 所以,我可能仍然会采用我的方法,尽管我认为我不会将其描述为“优雅”或“安全”。老实说,如果行为是您所描述的(即使您不活动,您也会将本地通知直接发送到您的应用程序),您应该提交一个错误,因为这不是文档所说的应该发生的事情。
    • 如果应用已发布“将退出活动”通知,则该应用实际上并未处于“非活动”状态。虽然它即将变为非活动状态,但当通知中心被拉到你的活动应用程序上时,情况似乎并非如此。虽然我仍在使用 5.0.1,但它可能已在 5.1 中修复。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多