在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
类的引用