Swift:设备锁定时继续播放声音
Posted
技术标签:
【中文标题】Swift:设备锁定时继续播放声音【英文标题】:Swift: Keep playing sounds when the device is locked 【发布时间】:2015-06-14 17:22:08 【问题描述】:我正在使用以下代码播放来自互联网的 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()”的原因。当我通过锁定屏幕在模拟器中尝试时,它会继续按预期播放。但是,如果我在设备中播放它,一旦屏幕自动显示或我自己锁定,声音就会关闭。
我的代码中缺少什么?
【问题讨论】:
看这里:developer.apple.com/library/ios/qa/qa1668/_index.html你添加了后台模式授权吗? 【参考方案1】:swift 2+ 解决方案:
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
catch _
return print("error")
【讨论】:
使用catch _
打印“错误”就像不使用错误处理。为了获得更好的答案,您可以添加捕获的错误本身的打印。 :)
@HardikThakkar 你可以在这里写代码 catch _ // 你的错误处理代码 【参考方案2】:
打开您的应用程序 info.plist 作为源代码(以文本模式编辑)并在 dict 之后添加以下内容:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
【讨论】:
我猜这只是防止我的设备自动锁定?我按照你说的做了,自动锁定没有启动。如果我手动锁定它,声音会立即停止。 设备应该锁定。 UIApplication.sharedApplication().idleTimerDisabled = true 禁用锁屏。关于 UIBackgroundModes 的文档在这里:developer.apple.com/library/ios/documentation/General/Reference/… 嗯,这很奇怪。我试过了,这是我得到的唯一结果。【参考方案3】:您使用了错误的类别,对于AVAudioSessionCategoryAmbient
,这是正常行为“您的音频被屏幕锁定和静音开关静音”。
请改用AVAudioSessionCategoryPlayback
。
【讨论】:
【参考方案4】:首先你应该像这样在你的 plist 中添加背景模式:
那么你应该使用 AVAudioSessionCategoryPlayback 会话。像这样:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSessionCategoryAmbient 在后台不起作用。
【讨论】:
以上是关于Swift:设备锁定时继续播放声音的主要内容,如果未能解决你的问题,请参考以下文章
如何让背景音乐继续播放而我的应用程序在使用 Swift 时仍然播放其声音