【问题标题】:AVAudioPlayer Keeps Playing After Multitasking多任务处理后 AVAudioPlayer 继续播放
【发布时间】:2011-06-19 15:21:33
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios xcode avaudioplayer


    【解决方案1】:

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

    我之前的代码是:

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

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

    现在我有这样的东西:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多