每隔10分钟在后台重复播放一次声音

时间:2018-08-12 19:42:03

标签: swift

即使应用程序处于后台,我也想每10分钟播放一次声音,可以吗?我用info.plist尝试了几件事,但是没有用。

代码如下:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var player: AVAudioPlayer?


    override func viewDidLoad() {
        super.viewDidLoad()


    }

    override func viewDidAppear(_ animated: Bool) {


        _ = Timer.scheduledTimer(timeInterval: 20.0, target: self, selector: #selector(ViewController.playSound), userInfo: nil, repeats: true)

        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
            print("Playback OK")
            try AVAudioSession.sharedInstance().setActive(true)
            print("Session is Active")
        } catch {
            print(error)
        }
    }


    @objc func playSound() {
        guard let url = Bundle.main.url(forResource: "sound", withExtension: "mp3") else { return }

        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

            player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

            guard let player = player else { return }

            player.play()

        } catch let error {
            print(error.localizedDescription)
        }
    }


}

我将非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

首先,请确保在“功能”中启用“图片背景模式”中的“音频”,“ AirPlay”和“图片”。否则,您将无法在后台播放音频。

Enable Audio, AirPlay and Picture in Picture Background Mode

不幸的是,这仅在您的应用播放音频时才有效。一旦您的应用程序处于后台并且最新音频结束,该应用程序就会终止。因此,您使用计时器的方法将无效。

唯一可行的方法(但Apple可能不会接受AppStore的应用程序)是,当应用程序在后台(例如,使用AVQueuePlayer)并且每十分钟播放一次时,您将播放另一个完全静音的音频文件将队列设置为您的声音。

我前一段时间使用了这种方法,效果很好。我什至在AppStore中看到了使用此方法的App,但我不知道它们是如何通过App Review来获得的。