仅当 Ring/Silent 开关打开时才播放声音
Play sound only when Ring/Silent switch is on ring
我正在开发一个带有钢琴键盘的应用程序。我希望只有在 "Ring/Silent" 开关打开时才播放按键后的声音。然后它应该停止来自其他应用程序的背景音乐。如果 "Ring/Silent" 开关处于静音状态,则它不应执行任何操作并让其他应用程序播放背景音乐(如 Spotify)。
我试过的方法(使用 Spotify 作为背景音乐):
选项 1 [AVAudioSessionCategoryAmbient]:
"Ring/Silent"开关响了:背景音乐不停,应用内声音和背景音乐一起播放(->我不想要的)
"Ring/Silent"开关静音:背景音乐不停,不播放应用内声音(->我想要的)
选项 2 [AVAudioSessionCategorySoloAmbient]:
"Ring/Silent" 开关打开:背景音乐停止播放应用内声音(-> 我想要的)
"Ring/Silent"开关静音:背景音乐停止,但没有播放应用内声音(->我想要的,它不应该停止背景音乐)
我认为选项 2 是我能得到的最接近的选项。当 "Ring/Silent" 开关处于静音状态时 iPhone 不应停止背景音乐,我会很高兴。
选项 3 [AVAudioSessionCategoryPlayback]:
"Ring/Silent" 开关打开:背景音乐停止播放应用内声音(-> 我想要的)
"Ring/Silent" 开关处于静音状态:背景音乐停止并播放应用内声音(-> 我不想要的)
我的代码:
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 来检查 phone 是否处于 Silent 状态,我们不鼓励您将应用程序的功能基于此类用户选择(低电量模式、是否充电、...)。
有一个检查设备是否静音的技巧:播放最短0.5s的短音,并检测播放时间。有关此解决方法的更多详细信息,请查看 here.
我正在开发一个带有钢琴键盘的应用程序。我希望只有在 "Ring/Silent" 开关打开时才播放按键后的声音。然后它应该停止来自其他应用程序的背景音乐。如果 "Ring/Silent" 开关处于静音状态,则它不应执行任何操作并让其他应用程序播放背景音乐(如 Spotify)。
我试过的方法(使用 Spotify 作为背景音乐):
选项 1 [AVAudioSessionCategoryAmbient]:
"Ring/Silent"开关响了:背景音乐不停,应用内声音和背景音乐一起播放(->我不想要的)
"Ring/Silent"开关静音:背景音乐不停,不播放应用内声音(->我想要的)
选项 2 [AVAudioSessionCategorySoloAmbient]:
"Ring/Silent" 开关打开:背景音乐停止播放应用内声音(-> 我想要的)
"Ring/Silent"开关静音:背景音乐停止,但没有播放应用内声音(->我想要的,它不应该停止背景音乐)
我认为选项 2 是我能得到的最接近的选项。当 "Ring/Silent" 开关处于静音状态时 iPhone 不应停止背景音乐,我会很高兴。
选项 3 [AVAudioSessionCategoryPlayback]:
"Ring/Silent" 开关打开:背景音乐停止播放应用内声音(-> 我想要的)
"Ring/Silent" 开关处于静音状态:背景音乐停止并播放应用内声音(-> 我不想要的)
我的代码:
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 来检查 phone 是否处于 Silent 状态,我们不鼓励您将应用程序的功能基于此类用户选择(低电量模式、是否充电、...)。
有一个检查设备是否静音的技巧:播放最短0.5s的短音,并检测播放时间。有关此解决方法的更多详细信息,请查看 here.