AVAudioPlayer在多任务处理后继续播放

时间:2011-06-19 15:21:33

标签: iphone ios xcode avaudioplayer

我有一个应用程序,在游戏过程中在后台播放音乐,支持多任务处理。当我按下主页按钮时,将在applicationWillResignActive上调用一个动作。这会拉出暂停屏幕并暂停游戏。但是,当我在游戏中实现音乐时,事情出了问题。我用AVAudioPlayer播放我的背景音乐。当调用applicationWillResignActive时,在调出暂停屏幕的同一操作中,音乐会被告知暂停。但是当你通过多任务回到应用程序时,暂停屏幕仍然显示应该,但音乐仍在播放。我已经在很多地方试过停止音乐,但它拒绝停止。即使在切换视图后,音乐仍然会播放。它完全没有反应。

这非常令人沮丧。请帮忙!

1 个答案:

答案 0 :(得分:3)

我今天花了好几个小时才遇到同样的问题。 我终于有了一个解决方法 #stop方法释放硬件,但不会忘记当前的播放位置 所以你可以再次调用#play并根据需要播放简历。

我之前的代码是:

[player pause];
...
if ([player isPaused]) { [player play]; }

这当然不起作用,并且在应用程序重新回到前台后,播放很快就恢复了,正如您所经历的那样。

现在我有这样的事情:

self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }

一个黑客,但它的确有效。唯一的缺点是隐式调用#prepareToPlay来重新获得播放硬件,重新缓冲等的所有权,因此播放时可能会有延迟 - 到目前为止我还没有注意到。

另请注意,根据您的实施情况,在上述黑客攻击后,可能会中断处理电话等中断。电话中断行为正常,因此通过上面的黑客攻击,任何共享代码都可能处于混乱状态以进行中断处理。