Swift - 当设备处于静音状态时 AVAudioPlayer 是否仍在播放声音?

Swift - AVAudioPlayer still playing sound when device is on silent?

我正在制作一个相当基本的应用程序,并且一直在探索使用 AVAudioPlayer 在我的应用程序中播放声音,但我遇到了一个问题,即使设备处于静音状态,它也会播放声音。这是我使用的代码:

var audioPlayer = AVAudioPlayer()

然后在视图中加载:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
var error:NSError?
var beepOne = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("menu", ofType: "wav")!)
audioPlayer = AVAudioPlayer(contentsOfURL: beepOne, error: &error)
audioPlayer.prepareToPlay()

以及播放声音时:

audioPlayer.play()

当设备处于静音或切换到静音状态时,如何停止播放声音?也许在 audioPlayer.play() 一个检测设备是否处于静音状态的 if 语句之前?

发现问题所在,在第二行和第三行代码中:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)

我不得不将 AVAudioSessionCategoryPlayback 更改为 AVAudioSessionCategoryAmbient

希望这对可能遇到同样问题的其他人有所帮助:)

我想添加一个使用 swift 2.0 的解决方案,它需要 try/catch 错误处理。 here.

上有一篇很棒的文章
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryAmbient, withOptions: .DuckOthers)
    } catch {
        print("AVAudioSession cannot be set")
    }       

此 post 是为了在 phone 静音时使音频播放静音。我想做相反的事情,实际上,如果您将上面的 AVAudioSessionCategoryAmbient 替换为 AVAudioSessionCategoryPlayback,即使 phone 静音,您的音频也会播放。