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

时间:2015-06-14 17:22:09

标签: ios swift avaudioplayer avplayer

我正在使用以下代码播放来自互联网的网址声音:

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()”的原因。当我通过锁定屏幕在模拟器中尝试它时,它会继续像它应该的那样播放。但是如果我在一个设备上播放它,一旦屏幕自动看起来或者我自己锁定声音就会关闭声音。

我的代码中缺少什么?

4 个答案:

答案 0 :(得分:5)

swift 2+解决方案:

audio

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

答案 1 :(得分:1)

您使用了错误的类别,Gender它的正常行为"您的音频通过屏幕锁定和静音开关来消音"。 请改用AVAudioSessionCategoryAmbient

答案 2 :(得分:1)

首先,你应该向你的plist添加背景模式,如下所示:enter image description here

然后你应该使用AVAudioSessionCategoryPlayback会话。像这样:

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

AVAudioSessionCategoryAmbient在后台不起作用。

答案 3 :(得分:0)

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

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