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>