StackOverflow 上有很多关于 iOS 中背景音乐播放的问题。没有人完全探索所有边缘情况,这个问题的目的是成为 iOS 上背景音频问题中的最后一句话
定义和假设
所有代码、问题和示例均参考ios5。
“背景” ——当用户按下主页按钮或电源按钮时应用程序进入的状态(因此设备显示锁定屏幕)。该应用程序还可以使用多任务切换器或 iPad 上的多任务手势置于后台。
"audio" — 使用 AudioQueue 播放的音频(包括 AVAudioPlayer)
先决条件
据我了解,让应用程序在后台播放音频有两个要求。
- 设置
UIBackgroundModes
为audio
_Info.plist
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
要求
我的用例是在后台播放相对较长的音频(音乐)。可能有数百首曲目,应用程序将按顺序播放它们。可以认为音频将无限期地播放。
该应用程序将通过暂停播放来处理中断。
问题
我在以下方面取得了喜忧参半的成功:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:...];
允许在后台播放音频。但我对它是否需要以及它与以下内容有何不同感到困惑:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
边缘案例
中断。如果您注册以接收音频中断(电话等)的通知,请成为
AVAudioPlayer
. 例如,如果您在中断开始时暂停或停止音频并在结束时恢复音频,如果中断超过 10 分钟(后台任务完成允许的最长时间),您的应用程序是否会暂停?如果调用 Lock 或 Home,模拟器将停止音频,同时使用:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
但是,这适用于设备。这是一个已知的问题?