仅在振铃/静音开关打开时播放声音

时间:2018-09-08 17:11:33

标签: ios swift avfoundation avaudiosession

我正在开发带有钢琴键盘的应用程序。我希望仅在“ Ring / Silent”开关处于振铃状态时播放按键后的声音。然后它应该停止其他应用程序的背景音乐。如果“铃声/静音”开关处于静音状态,则不应执行任何操作,而是让其他应用(例如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()

1 个答案:

答案 0 :(得分:2)

没有本机API来检查手机是否处于 Silent 上,并且不鼓励您将应用程序的功能基于这样的用户选择(在低电量模式下,是否在充电中,)。 ..)。

有一个黑客可以检查设备是否静音:播放最小持续时间为0.5s的声音,并检测播放所需的时间。有关此替代方法的更多详细信息,请查看here

相关问题