如何在后台模式下继续播放音频

chi*_*uda 11 audio ios

我有一个UIWebView,可以在我的视图控制器中播放视频片段.当我退出应用程序时,音频将停止播放,虽然我可以按控制中心的播放再次继续播放.为此,我在AppDelegate.swift中使用以下代码.

当应用程序进入后台时,我希望音频自动开始播放.如何启用MPMusicPlayerController/AVAudioPlayer(我真的不确定它是什么)继续播放,这样用户就不必手动按播放了?

我还在目标设置中的背景模式下选中了"音频和Airplay",并将所需背景模式设置为"App播放音频或使用AirPlay传输音频/视频".

var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if !success {
     NSLog("Failed to set audio session category.  Error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

更新:我正在创建一个自定义视图appDel以容纳视频迷你播放器.这就是我创造它的方式.CustomWindow是一个自定义类UIWindow,我将迷你播放器添加到视图层次结构的顶部.在这段代码中,我在创建之前调用该方法UIWebView吗?

class AppDelegate: UIResponder, UIApplicationDelegate {

    let myWind = CustomWindow(frame:UIScreen.mainScreen().bounds)
    var window: UIWindow? {
        set {

        }
        get {
            return myWind
        }
    }

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        var error: NSError?
        var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
        if success {
            AVAudioSession.sharedInstance().setActive(true, error: nil)
            UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
        } else {
            NSLog("Failed to set audio session category.  Error: \(error)")
        }

        myWind.showOrHidePopupWindow()
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*pko 5

尝试使用以下代码更新代码:

var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if success {
    AVAudioSession.sharedInstance().setActive(true, error: nil)
    UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 
} else {
    NSLog("Failed to set audio session category.  Error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

重要:

  1. 不要使用模拟器进行测试.后台播放在模拟器中不起作用;
  2. 在创建UIWebView实例之前调用上面的代码

资料来源:1,2.