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

标签 ios swift avfoundation avaudiosession

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

最佳答案

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

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

关于ios - 仅在铃声/静音开关打开时播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237567/

相关文章:

ios - 1 为企业和 App Store 打造的应用程序

ios - 验证失败后刷新(重新加载)NSManagedObject

ios - 异常 com.apple.coreaudio.avfaudio 原因 : error -50

ios - 如何在 IOS 相机中启用稳定和 HDR?

ios - 在滑动另一个 UIView 时禁用一个 UIView 上的用户交互

ios - 如何使用从 viewDidLoad 获取的信息设置 UIPickerView 值?

ios - 从 ICloud 获取图像将卡住 UI

iOS - Swift - 比较 2 个实体的值

swift - Swift 中的 UIBezierPath : Path gets closed very weirdly

ios - 在 iOS 上以 30fps 播放 200fps 视频