首页 > 解决方案 > 系统音量变化观察器在 iOS 15 上不起作用

问题描述

我使用以下代码来检测用户更改的系统音量。

NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)

当我更新到 iOS 15 时,我发现这段代码不起作用,但对于任何以前的 iOS 版本它都可以。

我也使用了一个addObserver函数,但没关系。

这是 iOS 15 的错误吗?如果是,我该怎么做才能修复它。

谢谢 :)

标签: swiftvolumeios15

解决方案


我挂钩了 MPVolumeControllerSystemDataSource的方法_systemVolumeDidChange并且在iOS 15.0(至少 beta2)中,通知名称已更改为SystemVolumeDidChange,这是新的通知结构:

{
    AudioCategory = "Audio/Video";
    Reason = ExplicitVolumeChange;
    SequenceNumber = 1069;
    Volume = 0;
}

有两点需要注意:

  1. 即使您按一次音量按钮,iOS 15(至少在 beta2 中)的此通知也会被调用两次,但它们的 SequenceNumber 是相等的;
  2. 此通知回调不在主线程上。

推荐阅读