ios - 仅在响铃/静音开关打开时播放声音
问题描述
我正在开发一个带有钢琴键盘的应用程序。我希望仅在“响铃/静音”开关打开时播放按键后的声音。然后它应该停止来自其他应用程序的背景音乐。如果“响铃/静音”开关处于静音状态,它不应该做任何事情并让来自其他应用程序的背景音乐播放(如 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 可以检查手机是否处于静音状态,并且不鼓励您将应用程序的功能基于此类用户选择(在低电量模式下,是否正在充电,...)。
检查设备是否静音有一个技巧:播放最短持续时间为 0.5 秒的短声音,并检测播放时间。有关此解决方法的更多详细信息,请查看此处。
推荐阅读
- scala - 如何使用 Azure Databricks 上的 scala 在循环中将新列添加到数据框
- sql - 如何使用standardize_address修复'关系“us_lex”不存在'?
- ruby-on-rails - gem“mysql2”安装错误
- python - 熊猫中的 series.tolist() 和 list 之间有区别吗
- sql - 根据参数有条件地修改查询
- python - 如何根据文件夹名称将文件从一个带有子文件夹的目录复制到另一个带有子文件夹的目录?
- javascript - 如何在执行代码时将数据发送到javascript
- sql-agent-job - 如何强制无限循环脚本在 sql server 代理作业中停止
- google-apps-script - 对 directory.members.insert 的 API 调用失败并出现错误:成员已存在
- android - Android 模拟器上的密钥库崩溃