Swift:当设备被locking时继续播放声音
我正在使用下面的代码从互联网上的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()”的原因。 当我在模拟器中通过locking屏幕来尝试它时,它会继续播放。 但是,如果我在一个设备中播放它,一旦屏幕自动自动closures,声音就会closures,或者我自己locking。
我在代码中缺less什么?
swift 2+解决scheme:
do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) } catch _ { return print("error") }
您使用了错误的类别,对于AVAudioSessionCategoryAmbient
这是正常的行为“您的audio被屏幕locking和无声开关沉默”。 改用AVAudioSessionCategoryPlayback
。
首先,你应该添加背景模式到你的plist像这样:
那么你应该使用AVAudioSessionCategoryPlayback会话。 喜欢这个:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSessionCategoryAmbient不能在后台工作。
打开您的应用程序info.plist作为源代码(在文本模式下编辑),并添加以下紧跟在字典之后:
<key>UIBackgroundModes</key> <array> <string>audio</string> </array>