即使应用程序处于后台,我也想每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)
}
}
}
我将非常感谢您的帮助:)
答案 0 :(得分:0)
首先,请确保在“功能”中启用“图片背景模式”中的“音频”,“ AirPlay”和“图片”。否则,您将无法在后台播放音频。
不幸的是,这仅在您的应用播放音频时才有效。一旦您的应用程序处于后台并且最新音频结束,该应用程序就会终止。因此,您使用计时器的方法将无效。
唯一可行的方法(但Apple可能不会接受AppStore的应用程序)是,当应用程序在后台(例如,使用AVQueuePlayer)并且每十分钟播放一次时,您将播放另一个完全静音的音频文件将队列设置为您的声音。
我前一段时间使用了这种方法,效果很好。我什至在AppStore中看到了使用此方法的App,但我不知道它们是如何通过App Review来获得的。