【问题标题】:Play sound only when Ring/Silent switch is on ring仅在响铃/静音开关打开时播放声音
【发布时间】:2018-09-08 17:11:33
【问题描述】:

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

【问题讨论】:

    标签: ios swift avfoundation avaudiosession


    【解决方案1】:

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

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

    【讨论】:

    • 我很惊讶没有官方 API,因为 Apple 提到如果手机处于静音模式,应用程序应该相应地运行,并且只应该播放必要的(例如由用户启动的)噪音。例如媒体播放期间的音频、警报等:developer.apple.com/design/human-interface-guidelines/ios/… – 我也遇到了播放解决方法,但它有点 hacky。不错的豆荚!
    • 我认为它会停止背景音乐 - 我想我只会使用 AVAudioSessionAmbient。因此,如果用户对应用内声音感到恼火,他可以将设备静音,但背景音乐永远不会停止。
    猜你喜欢
    • 2017-09-24
    • 2015-02-09
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多