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")
}
我正在使用以下代码从互联网上 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")
}