2015-08-31 112 views
3

我环顾四周,发现了几乎相似的问题,但没有什么相同的东西......如果我错过了某个地方的答案,我会道歉。在Swift中,当我的应用程序打开时,如何让其他应用程序继续播放音频?

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

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

当我玩我的游戏时,我注意到它会自动关闭其他应用程序的音频。

我没有使用AVAudioPlayer作为声音,因为我目前只有少量的音频效果,所以我只是使用了SKAction.playsoundfilenamed action而不是。

我确实有逻辑来打开和关闭我的声音,但这只是使用一些内部的if/else逻辑。

我想知道是否有一些AVAudio属性,我可以设置,这将允许其他应用程序音频,当我打开时继续播放?我无法在文档中找到它。

谢谢!

+0

感谢的人!它看起来像所有这些答案都会起作用,但我用最简单的方式去做了! –

回答

3

设置你的AVAudioSession类别Ambient

import AVFoundation.AVAudioSession 

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

此类别也适用于“一起玩”风格的应用程序,如用户在音乐应用程序播放起着虚拟钢琴。当您使用此类别时,来自其他应用程序的音频会与您的音频混合。屏幕锁定和Silent开关(称为iPhone上的Ring/Silent开关)会使您的音频静音。

2

在电话应用程序启动这个代码,以便您AVAudioSession让其他应用附和:

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

我不知道,如果你的viewController的架构,但你可以尝试运行这viewDidLoad或创建在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) 

Example code from GitHub

AVAudioSession class reference

3

自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) 

使用“尝试”是当你想要的程序做一些事情,再搭上一个错误。这是一个错误处理程序。通过添加感叹号,你几乎可以说“我知道这不会失败。”

这适用于我。我正在播放背景音乐,因为我的应用也是如此。

5

在Xcode中8.2.1,斯威夫特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 
} 
+0

正确答案,天救世主答案 – pkc456

相关问题