backgroundTaskIdentifier - 当app关闭时,UIAlert不会弹出

时间:2015-11-28 06:40:59

标签: swift

我正在使用backgroundTaskIdentifier让应用程序关闭时秒表继续运行。当应用关闭时,计数器会更新。

但是我希望在应用关闭时收到弹出式提醒通知。现在它在我打开应用程序时弹出,但这对我没有帮助,因为计时器已经停止。

相关问题。如果没有从服务器推送任何内容,应用程序是否可以推送通知?我的意思是,当计时器完成时,我可以为我的应用程序设置徽章吗?

变量声明

var backgroundTaskIdentifier: UIBackgroundTaskIdentifier?

viewDidLoad中

NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateTimerBasedViews", name: Timer.notificationSecondTick, object: timer)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "timerComplete", name: Timer.notificationComplete, object: timer)

backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
        UIApplication.sharedApplication().endBackgroundTask(self.backgroundTaskIdentifier!)
    })

适用的功能

func updateTimerBasedViews() {
    updateTimerLabel()
    updateProgressView()
}

func timerComplete() {
    switchToPickerView()
    playAlarm()
    // TO DO : ADD UIAlert

    let alert = UIAlertController(title: title, message: "Time to do it!", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

    //self.presentViewController(alert, animated: true, completion: nil) // old

    presentViewController(alert, animated: true) { () -> Void in
        let localNotification:UILocalNotification = UILocalNotification()
        localNotification.alertAction = "Testing"
        localNotification.alertBody = "Hello World!"
        localNotification.fireDate = NSDate(timeIntervalSinceNow: 5)
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    }

的AppDelegate

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil))

1 个答案:

答案 0 :(得分:1)

如果您想要在您的应用中显示弹出窗口,但在设备后台显示UIAlertAction的后台任务不正确。它将在您的应用程序上下文中显示气泡,而不是os系统。

您的方法应该是使用local notifications

你应该意识到这样的事情:

application.registerUserNotificationSettings(UIUserNotificationSettings (forTypes: UIUserNotificationType.Alert, categories: nil))

var localNotification:UILocalNotification = UILocalNotification()
localNotification.alertAction = "Testing"
localNotification.alertBody = "Hello World!"
localNotification.fireDate = NSDate(timeIntervalSinceNow: 5)
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

您可以找到很多教程,例如this