当用户将 phone 切换为静音时,如何防止我的 iOS VoIP 应用程序播放音频?

How can I prevent my iOS VoIP app from playing audio when the user switches their phone to silent?

我正在 iOS 上构建一个 VoIP 应用程序,我正在使用 AVAudioSessionCategoryPlayAndRecordAVAudioSession 类别,推荐用于需要不断播放和录制的 VoIP 应用程序音频。

但是,当用户将 iPhone 铃声切换到静音模式时,VoIP 应用程序仍会为来电播放声音。这不是我们想要的行为。

有没有办法在用户 phone 静音时阻止来电播放音频,但仍允许他们接听电话并恢复音频?

如果您在此处查看 AVAudioSession Categories 的文档,您会发现 AVAudioSessionCategoryPlayAndRecord 不幸地不遵守 phone 的静音,如下所示:

Your audio continues with the Silent switch set to silent and with the screen locked. (The switch is called the Ring/Silent switch on iPhone.) 

如果你想让phone静音时音频停止,你应该使用AVAudioSessionCategoryAmbient

我想我找到了适用于 VoIP 应用程序的解决方案。如果 phone 设置为静音,我希望 phone 显示警报和振动而不是播放铃声。

我可以通过使用本地通知并将声音移出应用程序并将其添加到通知本身来解决这个问题。通过将声音文件指定为通知的一部分,iOS 将处理是否应播放音频或振动 phone。这是由 phone 一侧的 Ring/Silent 开关的位置决定的。

Here's an Apple article on adding a sound to a local notification.