如何在iOS 10上捕获系统告警为triggered/dismissed的事件

How to capture the events of system alarm being triggered/dismissed on iOS 10

这是我的场景:我有一个视频播放器正在播放一些 video/audio 并且突然响起警报,因为我之前设置了它。

iOS 10 之前,警报的 UI 和音频会阻塞主 UI 线程,因此可以通过观察 UIWindowDidResignKeyNotification.[=24 来捕获警报事件=]

但在 iOS 10 上,警报 UI 的行为似乎与 Notification messages 一样,不会阻止主 UI。

但是它的闹钟声音会接管音频线程,所以结果是播放视频画面,不播放视频声音,而是播放闹钟声音。

对于 iOS 10,我所做的是观察 AVAudioSessionInterruptionNotification,当警报 运行 时会发布,一旦我收到它,我就会暂停我的视频播放。

但是这会导致另一个问题,就是我的用户在关闭警报后必须再次手动单击play按钮,这不太好。

Plus AVAudioSessionInterruptionNotification 会在任何其他类型的系统音频被触发时发布,例如 iMessagePush Notification 是音频非常短的消息,并且会导致暂停确实会给用户带来麻烦。

所以我想知道有没有办法监听用户解除闹钟的事件UI up/down.

或者如果有人能想出其他解决方案来解决此类问题。

更新:

这个alarm sound takes over the audio thread问题只有在视频被硬件解码时才会发生。

如果是视频的默认系统解码就可以了。

如果来电被触发并且来电声音也会接管音频线程,这很好,因为来电会阻塞主线程 UI 所以我也可以通过观察来管理它 UIWindowDidResignKeyNotification .

好吧,我的错是我没有仔细阅读 apple doc,一切都是 here

您可以使用AVAudioSessionInterruptionNotification中的用户信息。

它给出了它何时开始、何时结束甚至何时是恢复的最佳时间的枚举。