首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAudioPlayer在多任务处理后继续播放

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

Stack Overflow用户
提问于 2011-06-19 23:21:33
回答 1查看 1.1K关注 0票数 1

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

这是非常令人沮丧的。请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-23 12:21:18

我今天花了几个小时来解决完全相同的问题。我终于有了一个变通办法。

#stop方法释放硬件,但不会忘记当前的播放位置。

因此,您可以再次调用#play,并根据需要恢复播放。

我之前的代码是:

代码语言:javascript
复制
[player pause];
...
if ([player isPaused]) { [player play]; }

这当然不起作用,在应用程序回到前台后,播放很高兴地恢复了,正如你所经历的那样。

现在我有了类似这样的东西:

代码语言:javascript
复制
self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }

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

另请注意,根据您的实现,处理中断(如电话呼叫)可能会在上述黑客攻击后中断。电话呼叫中断的行为是正确的,因此通过像上面这样的黑客攻击,任何共享代码都可能处于中断处理的混乱状态。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6403261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档