iOS开发:推送通知可防止我的本地通知被触发

时间:2011-01-19 19:53:31

标签: iphone ipad ios push-notification uilocalnotification

我有一个闹钟应用程序,它设计为在前台运行时以特定方式运行,并且它会收到我的应用程序安排的本地通知。当用户设置闹钟时,我的应用会创建本地通知。当本地通知触发时,它会调用didReceiveLocalNotification方法来提醒用户。问题是,如果我的应用程序在前台运行并且推送通知来自不同的应用程序,则它会显示模式推送通知视图,这会阻止我的应用程序在本地通知触发时向用户发出警报。一旦我解除推送通知模式视图,我的应用程序就会触发本地通知。有没有解决的办法?我问,因为如果我的应用程序没有在用户安排它启动时触发警报,那么它有点失败了设置警报的全部目的。

非常感谢你的智慧!

2 个答案:

答案 0 :(得分:4)

应用程序有5种不同的状态:

  • Foreground Active
  • 前景不活跃
  • Backgroung Running
  • Backgroung暂停
  • 未运行

当您启动应用程序时,它处于“Foreground Active”,然后,当显示模态推送通知时,您的应用程序将转到“Foreground Inactive”。

在文档中,Apple说(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html):

如果应用程序在前台处于活动状态时传送它,它会显示警告,标记应用程序图标或播放声音 - 无论在UILocalNotification对象中指定了什么。如果应用程序在前台运行,则没有警报,标记或声音;相反,如果委托实现它,则调用application:didReceiveLocalNotification:方法。

因此,在前台,application:didReceiveLocalNotification:仅在您的应用处于活动状态时被调用,并且在您关闭模态通知时变为活动状态。

这是边缘线,这种情况没有解决办法。

答案 1 :(得分:1)

我不相信有办法绕过它。您可能能够播放声音或振动,但操作系统已经通过推送通知警报要求用户注意,因此在用户处理第一个操作系统之前发布另一个操作系统真的无济于事。当用户同时安排两个警报时,您如何处理事情?