我有一个在游戏过程中在后台播放音乐的应用程序,它支持多任务处理。当我按下home按钮时,会在applicationWillResignActive上调用一个操作。这将弹出暂停屏幕并暂停游戏。但是,当我在游戏中实现音乐时,事情就出了问题。我用AVAudioPlayer播放我的背景音乐。当调用applicationWillResignActive时,在弹出暂停屏幕的相同操作中,音乐被告知暂停。但当你通过多任务处理返回应用程序时,暂停屏幕仍在正常显示,但音乐仍在播放。我已经在许多地方尝试停止音乐,但它拒绝停止。即使在切换视图之后,音乐仍然可以播放。它完全没有反应。
这是非常令人沮丧的。请帮帮我!
发布于 2011-06-23 12:21:18
我今天花了几个小时来解决完全相同的问题。我终于有了一个变通办法。
#stop方法释放硬件,但不会忘记当前的播放位置。
因此,您可以再次调用#play,并根据需要恢复播放。
我之前的代码是:
[player pause];
...
if ([player isPaused]) { [player play]; }这当然不起作用,在应用程序回到前台后,播放很高兴地恢复了,正如你所经历的那样。
现在我有了类似这样的东西:
self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }一个黑客,但它是有效的。唯一的缺点是,会隐式调用#prepareToPlay来重新获得回放硬件的所有权,重新缓冲等等,所以回放可能会有延迟--我到目前为止还没有注意到。
另请注意,根据您的实现,处理中断(如电话呼叫)可能会在上述黑客攻击后中断。电话呼叫中断的行为是正确的,因此通过像上面这样的黑客攻击,任何共享代码都可能处于中断处理的混乱状态。
https://stackoverflow.com/questions/6403261
复制相似问题