iphone - 多任务处理后 AVAudioPlayer 继续播放

标签 iphone ios xcode avaudioplayer

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

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

最佳答案

我今天花了几个小时来解决同样的问题。
我终于有一个解决方法。
#stop 方法释放硬件,但不会忘记当前播放位置。
因此,您可以再次调用#play 并根据需要继续播放。

我之前的代码是:

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

这当然没有用,正如您所经历的那样,在应用程序回到前台后,播放愉快地恢复了。

现在我有这样的事情:
self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) { [player play]; }

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

另请注意,根据您的实现,在上述黑客攻击之后,处理诸如电话等中断可能会中断。电话中断行为正常,因此通过像上面这样的黑客攻击,任何共享代码都可能处于中断处理的困惑状态。

关于iphone - 多任务处理后 AVAudioPlayer 继续播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403261/

相关文章:

ios - 使用带有 Firestore 的 Cocoapod 来定位 iOS 扩展时出错

ios - 为什么我的饲料细胞会复制?

iphone - 如何实现如图所示的 UIPickerView,并带有组件标题?

ios - 4 英寸 iPhone 中的 uitableviewcell uiimage 自动布局问题

ios - 我可以从现有应用程序创建新的iOS应用程序吗?

ios - 在 swift 4 中实现 checkin 策略

ios - 构建开源 iOS 应用程序时出现链接错误

iphone - 为iPhone游戏创建声音

ios - xcode7 launchScreen.storyboard无法添加图像

ios - Objective-C Self 和 Synthesize 关键字