系统音量变化观察器在 iOS 15 上不起作用

Gye*_*eom 6 volume swift ios15

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

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

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

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

这是 iOS 15 的错误吗?如果是,我该如何修复它。

谢谢 :)

Ada*_*ang 16

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

{
    AudioCategory = "Audio/Video";
    Reason = ExplicitVolumeChange;
    SequenceNumber = 1069;
    Volume = 0;
}
Run Code Online (Sandbox Code Playgroud)

有两点需要注意:

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


mat*_*att 8

您正在做的事情不受支持,因此如果它不能在所有系统上运行也不足为奇。正确记录的方法是在音频会话属性上使用 KVO outputVolumehttps://developer.apple.com/documentation/avfaudio/avaudiosession/1616533-outputvolume