2015-08-31 150 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

相關問題