使用 Swift5.2、Xcode11.4 和 iOS13.4,
我尝试在未来的某个时间运行音频。
此外,应用程序处于后台模式(应用程序完全关闭)。
必须设置 Audiosession 以保持应用程序响应,并且音频声音应在长达 1 年的延迟时间开始。
我试过了:
A) 添加背景模式“音频、AirPlay和画中画”:
B)AudioSession和AVAudioPlayer配置如下:
import AVKit
var audioPlayer: AVAudioPlayer?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?)
-> Bool {
do {
//set up audio session
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playback, mode: .default, options: [.defaultToSpeaker, .duckOthers])
try audioSession.setActive(true)
// Start AVAudioPlayer
try audioPlayer = AVAudioPlayer(contentsOf: alertSound)
audioPlayer!.numberOfLoops = -1 // play endlessly
audioPlayer!.prepareToPlay()
let currentAudioTime = audioPlayer!.deviceCurrentTime
let delayTime: TimeInterval = 20.0 // here as an example, we use 20 seconds delay
audioPlayer!.play(atTime: currentAudioTime + delayTime) // delayTime is the time after which the audio will start
}
catch {
print(error)
}
return true
}
.
上面的代码有两个问题:
session-Category
.playback
确实会导致错误Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"
声音仅在应用程序处于前台或后台应用程序仍处于活动状态时播放 - 但不幸的是不在后台应用程序完全关闭
这是我的问题:
为什么会话类别
.playback
在 iOS13.4 下不起作用?为什么应用程序完全关闭时没有声音?(后台模式)???
仅设置背景模式标签“音频、AirPlay 和画中画”就足够了吗?或者是否需要一些代码才能完全实现后台模式?代码中是否缺少某些东西以便在完全封闭的应用程序中实现良好的未来启动?
至于问题1:
--> 我找到了一种解决方法并将会话类别设置为.playAndRecored
- 之后错误消失
try audioSession.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .duckOthers])
问题仍然存在:为什么 .playback 不起作用?.playback
和和有什么区别.playAndRecord
?