Приложение находится в фоновом режиме, и оно получает обратный вызов при отключении от устройства BLE, после чего приложение должно некоторое время ждать (1 минуту), а затем выполнить какой-то фрагмент кода. Приложение работает должным образом даже в фоновом режиме, если экран включен. Но если экран выключен, таймер не работает, и приложение не работает должным образом.
Это код в AppDelegate для запуска таймера в фоновом режиме:
func startTimerWith(timeInterval: TimeInterval) {
registerBackgroundTask()
timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: false, block: { (timer) in
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Time"), object: nil)
self.endBackgroundTask()
})
}
func registerBackgroundTask() {
backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
self.endBackgroundTask()
})
}
func endBackgroundTask() {
print("Background task ended.")
UIApplication.shared.endBackgroundTask(backgroundTask)
backgroundTask = UIBackgroundTaskInvalid
timer?.invalidate()
timer = nil
}
При отключении от устройства BLE я запускаю таймер, регистрируясь в фоновом режиме:
func disconnected(_ peripheral: CBPeripheral, with error: Error?) {
print("DISCONNECTED!!!")
AppDelegate.sharedApp().startTimerWith(timeInterval: TimeInterval(TIME))
BLEDeviceHandler.sharedInstance.handleBLEDevice(connectedPeripheral!)
}