首页 > 解决方案 > 仅在响铃/静音开关打开时播放声音

问题描述

我正在开发一个带有钢琴键盘的应用程序。我希望仅在“响铃/静音”开关打开时播放按键后的声音。然后它应该停止来自其他应用程序的背景音乐。如果“响铃/静音”开关处于静音状态,它不应该做任何事情并让来自其他应用程序的背景音乐播放(如 Spotify)。

我尝试了什么(以 Spotify 作为背景音乐):

选项 1 [AVAudioSessionCategoryAmbient]:

选项 2 [AVAudioSessionCategorySoloAmbient]:

我认为选项 2 是我能得到的最接近的选项。当“响铃/静音”开关处于静音状态时,iPhone 不应该停止背景音乐,我会很高兴。

选项 3 [AVAudioSessionCategoryPlayback]:


我的代码:

let NoteSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: currentNote.sound, ofType: "m4a")!)
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
    try AVAudioSession.sharedInstance().setActive(true)
    audioPlayer = try AVAudioPlayer(contentsOf: NoteSound as URL)
    audioPlayer.prepareToPlay()
    audioPlayer.play()
} catch {
    print("Problem in getting File")
}

在代码示例中,我只更改了.setCategory().

标签: iosswiftavfoundationavaudiosession

解决方案


没有本机 API 可以检查手机是否处于静音状态,并且不鼓励您将应用程序的功能基于此类用户选择(在低电量模式下,是否正在充电,...)。

检查设备是否静音有一个技巧:播放最短持续时间为 0.5 秒的短声音,并检测播放时间。有关此解决方法的更多详细信息,请查看此处


推荐阅读