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

时间:2015-08-31 13:47:25

标签: ios iphone swift audio

我环顾四周,发现了类似的问题,但没有完全相同......如果我在某个地方错过了答案,我会道歉。

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

我玩过的大多数其他游戏,我都可以在背景中播放音乐或播放音乐,并且在玩游戏时仍能听到它。

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

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

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

我想知道是否有一些我可以设置的AVAudio属性可以让其他应用音频在我打开时继续播放?我在文档中找不到这个。

谢谢!

5 个答案:

答案 0 :(得分:5)

在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
}

答案 1 :(得分:4)

AVAudioSession类别设为Ambient

import AVFoundation.AVAudioSession

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

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

答案 2 :(得分:3)

从2015年10月14日的xCode 7开始,这对我有用。

根据你正在使用的Swift版本,将它放在GameViewController.swift上。

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

并将此代码放在ViewDidLoad中:

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

使用"尝试"是你希望程序做某事然后发现错误的时候。它是一个错误处理程序。通过添加感叹号,您几乎都在说"我知道这不会失败。"

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

答案 3 :(得分:2)

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

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

答案 4 :(得分: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