即使类别是 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 性能计数器即使在删除性能类别后仍保持其状态

即使将其类别设置为播放(Swift),音频会话也会与其他会话混合?

iOS音频Error

删除magento中的空类别

具有日期和类别维度的 SQL 表