gpt4 book ai didi

swift - 如果应用程序关闭而不发送通知,如何在计时器上播放声音/振动?

转载 作者:行者123 更新时间:2023-11-30 13:25:47 27 4
gpt4 key购买 nike

我正在我的应用程序中构建一个锻炼计时器。工作流程是:

  1. 用户点击“启动计时器”按钮
  2. 计时器倒计时 90 秒秒
  3. 计时器在 90 秒后结束并触发 PlayAlertSound振动

这仅在应用程序打开时有效,并且我不希望我的用户在计时器达到 0 时查看我的应用程序。我可以发送通知,但随后我会在整个过程中发送数十条通知的单次锻炼。就我个人而言,我不喜欢从单个应用程序收到大量通知。感觉很吵。

有没有办法让应用程序在关闭时发送振动而不发送通知?

我试图请求后台资源,以便我的计时器在关闭应用程序后运行,但即使计时器继续运行,它也不会触发振动,直到我打开应用程序,即用户需要查看他们的电话。

这是我的代码:

class TimerViewController: UIViewController {

@IBOutlet weak var startTimerButton: UIButton!
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var resetTimerButton: UIButton!

var timer = NSTimer()
let timeInterval:NSTimeInterval = 0.05
let timerEnd:NSTimeInterval = 90
var timeCount:NSTimeInterval = 0.0

var backgroundTaskIdentifier: UIBackgroundTaskIdentifier?

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func startTimerButtonTapped(sender: UIButton) {
backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
UIApplication.sharedApplication().endBackgroundTask(self.backgroundTaskIdentifier!)
})

if !timer.valid {
timerLabel.text = timeString(timeCount)
timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
target: self,
selector: #selector(TimerViewController.timerDidEnd(_:)),
userInfo: "Time is up!!",
repeats: true) //repeating timer in the second iteration
}

}

@IBAction func resetTimerButtonTapped(sender: UIButton) {
timer.invalidate()
resetTimeCount()
timerLabel.text = timeString(timeCount)
}

func resetTimeCount(){
timeCount = timerEnd
}

func timeString(time:NSTimeInterval) -> String {
let minutes = Int(time) / 60
//let seconds = Int(time) % 60
let seconds = time - Double(minutes) * 60
let secondsFraction = seconds - Double(Int(seconds))
return String(format:"%02i:%02i.%02i",minutes,Int(seconds),Int(secondsFraction * 100.0))
}

func timerDidEnd(timer:NSTimer){
//timerLabel.text = timer.userInfo as? String
//timer that counts down
timeCount = timeCount - timeInterval
if timeCount <= 0 {
timerLabel.text = "Time is up!!"
timer.invalidate()
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
//pushNotification()
} else { //update the time on the clock if not reached
timerLabel.text = timeString(timeCount)
}

}
//
// func pushNotification() {
// let notification = UILocalNotification()
// notification.alertAction = "Go back to App"
// notification.alertBody = "This is a Notification!"
// notification.fireDate = NSDate(timeIntervalSinceNow: 1)
// UIApplication.sharedApplication().scheduleLocalNotification(notification)
// }
//

}

最佳答案

不幸的是,当收到本地通知时,无法唤醒您的应用程序 - 这是一件好事,否则它会被滥用。

但是你可以像这样在后台播放音频: How to Play Audio in Background Swift?

尝试播放 90 秒的静音,然后播放闹钟声音。

关于swift - 如果应用程序关闭而不发送通知,如何在计时器上播放声音/振动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com