在Swift中,当我的应用程序打开时,如何让其他应用程序继续播放audio?

我环顾四周,发现了几乎相似的问题,但没有什么不同。如果我在某处错过了答案,我会道歉。

我正在使用SpriteKit在Swift中完成一个游戏。

我玩过的大多数其他游戏,我可以在后台播放音乐,还可以在播放游戏时听到它。

当我玩我的游戏时,我注意到它会自动closures来自其他应用程序的audio。

我不使用AVAudioPlayer的声音,因为我目前只有less量的audio效果,所以我只是使用SKAction.playsoundfilenamed行动。

我有逻辑在那里打开和closures我的声音,但这只是使用一些内部的if / else逻辑。

我想知道如果也许有一些AVAudio属性,我可以设置,将允许其他应用程序的audio,当我打开时继续播放? 我无法在文档中find它。

谢谢!

将您的AVAudioSession类别设置为Ambient

 import AVFoundation.AVAudioSession AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil) 

此类别也适用于“play along”风格的应用程序,例如用户在音乐应用程序播放时播放的虚拟钢琴。 当您使用此类别时,来自其他应用程序的audio会与您的audio混合。 您的audio通过屏幕locking和静音开关(iPhone上的Ring / Silent开关)静音。

在Xcode 8.2.1,Swift 3(最新的语法)中,这对我有用:

 import AVFoundation override func viewDidLoad() { super.viewDidLoad() let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers]) try audioSession.setActive(true) }catch{ // handle error } // the rest of your code } 

截至2015年10月14日的xCode 7,这对我很有用。

把这个放在GameViewController.swift上,取决于你正在使用的Swift版本。

 //Swift 2.2 import AVFoundation.AVAudioSession //Swift 3.0 import AVFoundation 

并把这个代码放在ViewDidLoad中:

 try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 

“尝试”的使用是当你想让程序做一些事情,然后发现一个错误。 这是一个error handling程序。 通过添加感叹号,你几乎可以说“我知道这不会失败”。

这对我有用。 我正在播放背景音乐,因为我的应用程序也是。

在应用程序启动时调用此代码,以便您的AVAudioSession允许其他应用程序响铃:

 let audioSession = AVAudioSession.sharedInstance() audioSession.setCategory(AVAudioSessionCategoryPlayback, withOptions:AVAudioSessionCategoryOptions.MixWithOthers, error: nil); audioSession.setActive(true, error: nil) 

我不确定你的viewController的架构,但你可以尝试在viewDidLoad运行它,或者创build一个在viewDidLoad调用的独立方法。

这个代码可能有更好的地方,但是不知道你的应用程序的代码是什么样的,你可以把它粘在那里,看看你是否能得到它的工作。

 // this goes at the top w/ your import statements import AVFoundation // you could put this in your viewDidLoad or wherever it's appropriate for your code let session = AVAudioSession.sharedInstance() session.setCategory(AVAudioSessionCategoryAmbient, withOptions: nil, error: nil) session.setActive(true, withOptions: nil, error: nil) 

来自GitHub的示例代码

AVAudioSession类的引用