Swift - AVAudioPlayer在设备静音时仍然播放声音?

时间:2015-02-13 09:52:23

标签: ios swift xcode6 avaudioplayer silent

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

var audioPlayer = AVAudioPlayer()

然后在View中加载:

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语句之前检测设备是否处于静默状态?

2 个答案:

答案 0 :(得分:17)

在第二行和第三行代码中找到了错误:

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

我必须将AVAudioSessionCategoryPlayback更改为AVAudioSessionCategoryAmbient

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

答案 1 :(得分:1)

我想使用swift 2.0添加一个需要try / catch错误处理的解决方案。关于这个here,有一篇很棒的文章。

    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryAmbient, withOptions: .DuckOthers)
    } catch {
        print("AVAudioSession cannot be set")
    }       

这篇文章是为了在手机静音时使音频播放静音。我想反过来做,如果用AVAudioSessionCategoryPlayback替换上面的AVAudioSessionCategoryAmbient,即使手机静音,你的音频也会播放。