#ios #swift
У меня с периодичностью запускается фоновый поток scheduledTimerWithTimeInterval(), который проверяет наличие в базе записей с определенным статусом Если такие записи есть, то необходимо воспроизвести mp3. Делал воспроизведение с помощью: 1. AVAudioPlayer Включил Audio, AirPlay and Picture in Picture в BackgroundModes do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) } catch _ { return print("error") } Установил категорию AVAudioSessionCategoryPlayback Проблема: на открытом экране каждые 20 секунд издается звук (играет музыка), а вот когда просто сверну приложение, звук сам уже не воспроизводится. 2. AudioServicesPlayAlertSound(1009) Работал но APPLE отклоняли с причиной "Включен режим backgroundModes но ни чего не воспроизводится". Что можно использовать для такой задачи? UPD Это метод который запускает таймер с интервалом 20 секунд: func scheduledTimerWithTimeInterval(){ timer = NSTimer.scheduledTimerWithTimeInterval(20, target: self, selector: #selector(ListOfOrders.checkNewOrder), userInfo: nil, repeats: true) registerBackgroundTask() } Это метод, который запускает таймер, в котором происходит закачка и проверка данных. Если есть новые данные, в теории телефон должен пищать func checkNewOrder() { WorkWithInternet().getOrders(self, token: prefs.stringForKey("token")!, col: 0, add: false, vc: ListOfOrders()) } UPD2 Воспроизведение звука по файлу: do { let soundURL: NSURL = NSBundle.mainBundle().URLForResource("notif", withExtension: "mp3")! audioPlayer = try AVAudioPlayer(contentsOfURL: soundURL) audioPlayer!.delegate = self audioPlayer!.prepareToPlay() audioPlayer!.play() }catch{ print("Error") } UPD3 var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid Регистрирует таск в фоне: func registerBackgroundTask() { backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { [unowned self] in self.endBackgroundTask() } assert(backgroundTask != UIBackgroundTaskInvalid) } Функция завершения бэкграунд-таска: func endBackgroundTask() { NSLog("Background task ended.") UIApplication.sharedApplication().endBackgroundTask(backgroundTask) backgroundTask = UIBackgroundTaskInvalid }
Ответы
Ответ 1
Взгляни на этот проект из книги Я лично протестировал его на iOS 9.3 iPhone 6+ все работает.
Комментариев нет:
Отправить комментарий