I'm using the following code to play a sound off a URL from the internet:
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()
I'm trying to make sure it keeps playing in the background which is the reason why I'm using "AVAudioSession.sharedInstance()". When I try it out in the simulator by locking the screen, it keeps playing like it's supposed to. But if I play it in a device, the sounds shuts off as soon as the screen looks itself automatically or I lock it myself.
What am I missing in my code?
You use wrong category, for AVAudioSessionCategoryAmbient it's normal behavior "Your audio is silenced by screen locking and by the Silent switch".
Use AVAudioSessionCategoryPlayback instead.
first of all you should add background mode to your plist like this:
Then you should use AVAudioSessionCategoryPlayback session. Like this:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSessionCategoryAmbient does not work in background.
Open your app info.plist as Source code (to edit in text mode) and add the following just after dict:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
来源:https://stackoverflow.com/questions/30832352/swift-keep-playing-sounds-when-the-device-is-locked
