如何在 iOS 中安排可以暂停或删除的本地通知?

Posted

技术标签:

【中文标题】如何在 iOS 中安排可以暂停或删除的本地通知?【英文标题】:How to schedule local notifications in iOS that can be paused or removed? 【发布时间】:2016-07-28 22:33:11 【问题描述】:

我正在尝试使用以下 ios 库实现本地前台通知:https://github.com/kunass2/BSForegroundNotification

我希望在倒计时达到 0 后触发通知,但我无法找到一种在计时器上实现暂停和重新启动按钮的好方法,该按钮也会暂停通知或设置新通知。

这是我当前的实现,它失败了,因为如果我按下重新启动以启用重置计时器的新通知的触发,旧的通知也会被触发:

func setupLocalNotifications()  // called whenever current timer countdown reaches 0
let notification = BSForegroundNotification(userInfo: userInfoForCategory("ONE_BUTTON"))
    notification.timeToDismissNotification = NSTimeInterval(10)
    // Delay 10 seconds
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(self.timeRemaining * Double(NSEC_PER_SEC))), dispatch_get_main_queue())  () -> Void in
        if self.willDisplayForegroundNotification 
            notification.presentNotification()
        
    
    notification.delegate = self


@IBAction func startPauseButtonPressed(sender: AnyObject) 
        if self.counting 
            self.timer?.invalidate()
            UIApplication.sharedApplication().cancelAllLocalNotifications()
            self.willDisplayForegroundNotification = false
            self.counting = false
            startPauseButton.setTitle("Resume", forState: .Normal)
            startPauseButton.setImage(UIImage(named: "Play.png"), forState: .Normal)
        
        else 
            setupLocalNotifications()
            self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(NewFocusViewController.countdown), userInfo: nil, repeats: true)
            self.willDisplayForegroundNotification = true
            self.counting = true
            startPauseButton.setTitle("Pause", forState: .Normal)    
        


@IBAction func restartButtonPressed(sender: AnyObject) 
    self.timer?.invalidate()
    UIApplication.sharedApplication().cancelAllLocalNotifications()
    self.timeRemaining = Double(self.timeMax)
    self.counting = false
    self.willDisplayForegroundNotification = false
    self.updateTimer()
    self.startPauseButton.setTitle("Start", forState: .Normal)

【问题讨论】:

【参考方案1】:

我通过在 App Delegate 中实现 didReceiveLocalNotification() 方法来呈现前台通知,从而解决了这个问题。

【讨论】:

以上是关于如何在 iOS 中安排可以暂停或删除的本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 10 中安排和处理本地通知

iOS 本地通知可以安排在多远的将来?

在 PhoneGap/Cordova 中安排本地通知在 iOS 模拟器上不起作用

在后台任务中安排通知

如何在 Windows Phone 应用程序 8.1 rt 中安排本地通知?

当我的 iOS 应用程序处于前台时,如何使本地通知静音?