Swift3 – lucrul cu taskuri in background

Avem urmatorul scenariu: o aplicatie player audio care “observa” cand schimbam outputul audio: cand trecem de pe casti pe speaker si viceversa.
Nu intram in detalii aici cum e cu schimbarea rutei audio, poate intr-o discutie viitoare.
Ceea ce vreau sa punctez aici este urmatorul aspect: acest player poate functiona din IOS 8 si in background. Pot asculta muzica si atunci cand blochez ecranul sau comut pe alta aplicatie.
Cum pot permite unei aplicatii scrise in Swift3 sa “lucreze” si in background?

1. pot implementa metoda applicationWillResignActive(_ application: UIApplication)
2. putem inregistra notificarea UIApplicationWillResignActive oriunde in cadrul proiectului nostru Swift.

Cum facem lucrul asta:

1. func applicationWillResignActive(_ application: UIApplication) {
......
DispatchQueue.main.async {
self.backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
self.endBackgroundUpdateTask()
})
.....
}

2. NotificationCenter.default.addObserver(
self,
selector: #selector(appDidEnterBackground(notification:)),
name: .UIApplicationWillResignActive ,
object: nil)

unde definim selectorul astfel:

func appDidEnterBackground(notification: NSNotification) {
var bti:UIBackgroundTaskIdentifier=0
bti=self.app.beginBackgroundTask{
UIApplication.shared.endBackgroundTask(bti)
}

Le-am folosit pe ambele in aplicatii, insa o prefer pe a doua din motiv de claritate a codului. Nu e chiar ok sa abuzez de AppDelegate.

Share Button