Swift: 设备锁定时继续播放声音

Swift: Keep playing sounds when the device is locked

我正在使用以下代码从互联网上 URL 播放声音:

var audioPlayer = AVPlayer()

...

let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryAmbient, error: nil)

let url = trackFileName
let playerItem = AVPlayerItem( URL:NSURL( string:url ) )
audioPlayer = AVPlayer(playerItem:playerItem)
audioPlayer.rate = 1.0;
player.play()

我正在努力确保它一直在后台播放,这就是我使用 "AVAudioSession.sharedInstance()" 的原因。当我通过锁定屏幕在模拟器中试用它时,它一直按预期播放。但是如果我在设备上播放它,一旦屏幕自动显示或我自己将其锁定,声音就会关闭。

我的代码中缺少什么?

打开您的应用 info.plist 作为源代码(以文本模式编辑)并在 dict 之后添加以下内容:

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
</array>

您使用了错误的类别,因为 AVAudioSessionCategoryAmbient 这是正常行为 "Your audio is silenced by screen locking and by the Silent switch"。 请改用 AVAudioSessionCategoryPlayback

首先你应该像这样在你的 plist 中添加背景模式:

那么你应该使用 AVAudioSessionCategoryPlayback 会话。像这样:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)

AVAudioSessionCategoryAmbient 在后台不工作。

swift 2+解法:

do {
  try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
  try AVAudioSession.sharedInstance().setActive(true)
} catch _ {
  return print("error")
}