在 iOS 上关闭视图控制器后如何继续播放音频?

Posted

技术标签:

【中文标题】在 iOS 上关闭视图控制器后如何继续播放音频?【英文标题】:How to continue to play audio after view controller is dismissed on iOS? 【发布时间】:2016-05-19 08:50:10 【问题描述】:

我在一个导航控制器中有两个视图控制器,我们可以从第一个视图控制器导航到第二个视图控制器。

音频播放代码在第二个视图控制器的 viewDidLoad 方法中,如下所示:

let url = NSBundle.mainBundle().URLForResource("audioName", withExtension: "mp3")
        //player = AVAudioPlayer(contentsOfURL: url!)
        do 
            player = try AVAudioPlayer(contentsOfURL: url!)
            //player.play()
            dispatch_async(dispatch_get_main_queue(), 
                self.player.play()
            )
         catch 
            print("play error")
        

我的问题是,当加载第二个视图控制器时,正在播放音频,但是当我关闭第二个视图控制器并返回到第一个视图控制器时,音频停止播放。

我直接尝试了 play() 方法和 dispatch_async(dispatch_get_main_queue()) 方法,但是当第二个视图控制器关闭时,音频无法继续播放。

另外,音频可以在Xcode模拟器的后台自动播放,不知道有什么方法可以自定义。

【问题讨论】:

创建一个共享视图,在其中添加您的代码,检查此github.com/willingheart/AZSoundManager 【参考方案1】:

'player-AVAudioPlayer' 在 vi​​ewcontroller 2 中声明。因此,当 viewcontroller 2 被弹出时,它与 viewcontroller 一起被释放。

将您的“播放器-AVAudioPlayer”对象创建为单例对象并将其存储在您的 AppDelegate/会话数据中。现在,无论您需要在哪里播放音频,只需从那里访问该对象并播放它。这样,即使在 viewcontroller 2 弹出后,它也会继续播放。

【讨论】:

以上是关于在 iOS 上关闭视图控制器后如何继续播放音频?的主要内容,如果未能解决你的问题,请参考以下文章

关闭网页视图后,来自 Youtube 嵌入式视频的音频继续播放 - Flutter

返回另一个视图控制器IOS7后如何暂停音频一次

(iOS) 音频播放器作为应用程序中所有父视图控制器上的子视图控制器

当我在我的应用程序中录制完整的音频时,如何在其他 iOS 应用程序中继续播放音乐? [关闭]

从该音频ViewController IOS7返回后如何停止音频

在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放