简体   繁体   中英

Executing code, when the application is in background not working on physical device (SWIFT)

I am making an app, that is reliant on executing some minor code in the background and I ran into a peculiar problem.
The app has a timer, an NSTimer() . The principle behind all of this is similiar to that of timer (in Clock application, that is installed on all iOS devices), meaning, when the timer ends a UILocalNotification is displayed.

Everything works as expected when I run it on an emulated device in Xcode, but when I test it on my iPhone, there are no notifications. It is something along the lines of:

var end = timerHasEnded()
if end == true{
    println("the timer has ended")
}

and it was not working. So I checked if the application even detects the background UIApplicationState by doing this and it does not on the physical device. Interestingly enough, it does so on an emulated device.

I tried running the timer on background thread, using QOS_CLASS_BACKGROUND and dispatch_async to no avail. Can anybody help me?

Could you just schedule a UILocalNotification to appear after a delay, when the delay was the remaining time left in your alarm?

var date: NSDate = /*time until your timer expires*/
let app = UIApplication.sharedApplication()
let oldNotifications = app.scheduledLocalNotifications
if oldNotifications.count > 0 {
    app.cancelAllLocalNotifications()
}

let alarm = UILocalNotification()
alarm.fireDate = date
alarm.timeZone = NSTimeZone.defaultTimeZone()
alarm.repeatInterval = 0
alarm.soundName = "myAlarmSound.caf"
alarm.alertBody = "Do something!"

app.scheduleLocalNotification(alarm)

I wrote this code from an Obj-C example provided by Apple.

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM