【问题标题】:How can I dismiss UILocalNotifications that appear when my app is in the background?当我的应用程序在后台时,如何关闭出现的 UILocalNotification?
【发布时间】:2011-04-07 23:09:19
【问题描述】:

我正在开发一个 iPhone 应用程序,该应用程序需要使用 UILocalNotifications 提醒用户定期签到。如果他们几个小时没有签到,他们可能会被提醒几次,但我只想显示最新的通知。

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

如果应用程序没有运行并且用户点击-action-按钮,我会收到一个回调

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

这样我就可以关闭任何旧通知。但是,如果他们单击“取消”,则必须在一堆分层通知上单击“取消”,因为据我所知,我没有收到回调(如果应用程序未启动,我怎么能)并且在创建 UILocalNotification 以使来自应用程序的更新提醒自动关闭其他提醒时,似乎没有标志或其他东西。

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

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

谢谢。

【问题讨论】:

    标签: iphone uialertview uilocalnotification reminders


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,这样做的缺点是,如果他们错过了签到 - 如果他们在提醒后 20 秒以上解锁手机(因此解锁不会启动应用程序),但做其他事情忘记签到,或者如果他们只是因为忙而取消提醒 - 那么他们将永远不会再次收到提醒......这可能是用户忘记再次签到的秘诀,从而抵消了应用程序的价值.
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多