iOS 9如何在静音模式下播放音频但保持其他应用程序的音乐播放运行

6

我的应用中有一些警告声音,但我确实需要背景音乐(例如 Spotify)在后台持续运行。我通过以下方式解决了这个问题:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

然而,在静音模式下,我的AVAudioPlayer是静音的,但即使在静音模式下,声音也至关重要。我了解到AudioServicesPlaySystemSound忽略了静音模式,但至少在iOS9上不是这样的。还有其他可能吗?哦,请不要浪费时间说一些像“作为用户,我会讨厌这个功能”,“难道它不叫做静音模式吗”之类的话...这是一个编程页面,不是哲学课。
2个回答

7
音频会话类别AVAudioSessionCategoryAmbient将遵守文档中所述的静音/铃声开关。 AVAudioSessionCategoryAmbient是一个非主要的应用程序类别,即您的应用程序可以在关闭声音的情况下成功使用... 当屏幕锁定和静音开关(在iPhone上称为静音/铃声开关)时,您的音频将被静音。 我建议尝试具有混音选项的更适合的分类方式 -
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers 
                                       error:nil];

AVAudioSessionCategoryPlayback 类别会忽略静音开关,正如文档中所述 -

当使用此类别时,即使将静音开关设置为静音或屏幕锁定,您的应用程序音频仍将继续播放。


这在iOS 9上还有效吗?当我在GM上尝试时,它不再起作用,只会震动。 - lammert
它对我也不起作用:iPhone 8,软件版本13.7。 - Eduardo Lago Aguilar

0
我在按钮操作中放置了播放音频的代码:
这对于较新的iOS版本也有效(我正在iOS 12中使用它)
(在静音模式下播放背景音乐,并在同时单击按钮时在您的应用程序中播放音频)
import AVFoundation

var audioPlayer = AVAudioPlayer()

@IBAction func btnAudioClickableAct(_ sender: Any) {

    let audioSession = AVAudioSession.sharedInstance()
    try!audioSession.setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)

    if let path = Bundle.main.path(forResource: "activityAudio", ofType: "mp3") {

        let filePath = NSURL(fileURLWithPath:path)
        audioPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL)
        audioPlayer.prepareToPlay()
        audioPlayer.play()

    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接