ios - 如何让 iOS VoIP 应用程序在响铃时服从“请勿打扰”?

标签 ios audio voip hig

有人会认为 VoIP 应用程序必须遵守与普通电话应用程序相同的规则,但事实证明要正确实现响铃几乎是不可能的。我尝试了几件事:

  1. 带有铃声的本地推送通知。

    好:遵守静音和免打扰模式。

    :声音不能超过 30 秒,并且只在通知出现时振动一次。因此,为了达到振铃效果,必须重新推送通知,例如每 6 秒,有效地向通知中心发送垃圾邮件。此外,如果应用处于事件状态,推送通知不会发出声音/振动,因此应用必须检测到这一点并发出不同的铃声。

  2. AudioServicesPlayAlertSound()

    :适当的 API 似乎是专门为此任务设计的。遵守静音模式。

    :完全忽略“请勿打扰”模式,声音和振动直接通过。

  3. 使用AVFoundation播放铃声。

    声音播放。

    差:不支持振动,不支持静音/免打扰模式。基本上不能用作铃声。

有没有更好的方法?还是 Apple 完全错过了这个用例?

最佳答案

正如您在 3 个选项中所说,只有 UILocalNotification 实际上遵守静音/免打扰模式。

它的问题是可以解决的。

向通知中心发送垃圾邮件:我认为这很有效。您可以在发出新通知之前立即取消之前的通知,因此始终只有 1 个未完成的通知。

[[UIApplication sharedApplication] cancelAllLocalNotifications];

振动问题:您应该能够调用此:AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 在您使用计时器一遍又一遍调用本地通知的同一位置直到通话结束或用户确认通话。使用 VOIP 背景设置,它应该在后台工作。

正如您在选项 2 中所述,振动不会遵循免打扰模式,而只是振动。如果您向通知中心发送垃圾邮件,它会在每次收到通知时振动一次,所以如果这对您来说足够了,您可能不需要明确地开始振动。

祝你好运。

关于ios - 如何让 iOS VoIP 应用程序在响铃时服从“请勿打扰”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631839/

相关文章:

ios - 分析和合法性问题

ios - 如何在 swift 中创建负的 Firebase 时间戳

ios - UICollectionViewCell 有 2 个单元格,每个单元格的高度为 "wrap_content"

ios - iPhone 应用程序中的 VOIP 实现

voip - H.264 over RTP 流在播放时损坏

python - 在python中实时播放原始音频文件

android - 哪个方法 : native app or HTML5 for my radio website?

audio - PJSIP通过 session 桥将仅麦克风设备的语音录制到WAV文件

java - Android SoundPool load()返回null

iOS 推送通知声音停止使用 azure 通知中心工作 [根本没有声音]