即使类别是 AVAudioSessionCategoryPlayback,AVAudioPlayer 也会在屏幕锁定时停止播放
Posted
技术标签:
【中文标题】即使类别是 AVAudioSessionCategoryPlayback,AVAudioPlayer 也会在屏幕锁定时停止播放【英文标题】:AVAudioPlayer stops playing on screen lock even though the category is AVAudioSessionCategoryPlayback 【发布时间】:2011-11-10 19:17:20 【问题描述】:我的应用使用 AVAudioPlayer 播放音频播放列表。 ios4.3 和iOS5 之间的代码我没有更改。但是,即使我将类别设置为 AVAudioSessionCategoryPlayback,iOS5 上的音频也会在屏幕锁定时暂停。
我在iOS4.3和iOS5设备上测试过代码,iOS5设备出现这个问题。
还有其他人遇到过这个问题吗?我不知所措,因为我什至不知道从哪里开始调试这个问题。我的调试以检查 AVAudioSessionCategory 设置开始和结束。
我正在做的代码是:
[[AVAudioSession sharedInstance] setDelegate: self];
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];
编辑:
我已经实现并处理了audioPlayerBeginInterruption
编辑 #2:已解决!感谢Rhythmic Fistman's Answer
这是正在发生的事情以及我所做的事情。即使屏幕被锁定,iOS5 的更改现在也会将您的应用程序推到后台。这意味着您需要在应用中启用背景音频,并让处理该音频的任何视图/视图控制器成为第一响应者。
第 1 步: Enable background audio in your app
第 2 步: Enable remote events and become the first responder on the viewcontroller / view responsible for handling your audio playlist
注意: 确保在设备上对此进行测试。模拟器会让代码看起来好像不起作用。
【问题讨论】:
【参考方案1】:iOS5 中的屏幕锁定已更改,它现在将您的应用发送到后台,因此如果您希望音频继续播放,您必须将“音频”作为 UIBackGroundModes 添加到您的 Info.plist 文件中。
我能找到的最接近这方面文档的是一些 苹果devforumposts(需要登录)。
【讨论】:
谢谢!我错过了这个......我对 plist 进行了更改,但它仍然没有帮助。然而,这是取得一些进展的良好开端...... 事实证明,它在模拟器中不起作用,但在设备上起作用!谢谢!对我来说,下一步是设置一个后台任务来运行播放列表,因为它在播放当前曲目后停止。 一旦我完成了这个问题,我会回来编辑这个问题来帮助下一个无知的流浪者:D 在后台运行之前调用[audioplayer prepareToPlay]
对于后台播放也很重要。【参考方案2】:
我对音频不太习惯,但你有没有考虑过中断?我读过一些话(在我的记忆中),如果发生中断,音频可能会停止,让它再次播放是你的工作。
但这只是我记忆中的东西。这有帮助吗?
【讨论】:
嗨奥利弗,感谢您的回复。我已经实现了 audioPlayerBeginInterruption,并在该方法中设置了一个断点。断点没有被击中,所以我不认为这是原因,很遗憾。 :) @Sid :如您所愿,我可以将我的答案留在那里以帮助其他人查看您的尝试进度,或者您可以将其作为编辑插入到您的问题中,然后我可以删除我的如果您想让您的问题标记为“无答案”,请回答。随你喜欢。以上是关于即使类别是 AVAudioSessionCategoryPlayback,AVAudioPlayer 也会在屏幕锁定时停止播放的主要内容,如果未能解决你的问题,请参考以下文章
即使没有结果,如何在分组的 MS Access 报告中显示类别
RawFraction 性能计数器即使在删除性能类别后仍保持其状态