如何解除我的应用在后台时出现的本地通知?

时间:2011-04-07 23:09:19

标签: iphone uialertview uilocalnotification reminders

我正在开发一款iPhone应用程序,需要提醒用户使用UILocalNotifications定期检查。如果他们没有办理登机手续几个小时,可能会提醒他们几次,但我只是想显示最新的通知。

现在,如果应用程序处于打开状态,我会收到didReceiveLocalNotification :( UILocalNotification *)通知的回调,我可以跟踪是否有通知显示。

如果应用程序未运行且用户单击-action-按钮,则会收到回调

  • (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

所以我可以解雇任何旧通知。但是,如果他们单击“取消”,他们必须在一堆分层通知上单击“取消”,因为据我所知,我没有得到回调(如果应用程序未启动,我该怎么办)并且在创建UILocalNotification时,似乎没有标记或其他内容,以便从应用程序中自动关闭其他提醒。

如果应用程序在后台运行,那就更糟了 - 首先,如果用户单击取消,我没有得到任何回调,所以我遇到了同样的问题 - 用户必须单击取消一堆倍。其次,如果他们单击动作,我会调用ApplicationDidBecomeActive,但是没有区别,当用户只是来回切换时;我可以在这里解雇并重新安排它们,但它似乎并不完美,有时会在它们被解雇之前弹出一些。

有什么建议吗?如果有一种方法可以让通知自动过期,那也很棒。我在网上看了一下,并没有找到太多的帮助,但这似乎是一个很大的疏忽,所以希望有一些方法可以优雅地处理这个问题。

感谢。

2 个答案:

答案 0 :(得分:1)

当用户按照您的指示“取消”时,您将无法获得任何回调。

在您的情况下,是否可以只提醒用户一次?只能一次安排一个通知,并在应用启动/恢复时续订。

答案 1 :(得分:0)

我还没有尝试过以下内容,但我相信这可以解决您的问题。使用CLLocationManagerstartMonitoringSignificantLocationChanges

每当设备的位置发生重大变化时,您的应用都会在后台启动,并且选项会传递到locationManager:didUpdateLocations:,您可以从那里安排UILocalNotification