swift - 系统音量变化观察器在 iOS 15 上不起作用
问题描述
我使用以下代码来检测用户更改的系统音量。
NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
当我更新到 iOS 15 时,我发现这段代码不起作用,但对于任何以前的 iOS 版本它都可以。
我也使用了一个addObserver
函数,但没关系。
这是 iOS 15 的错误吗?如果是,我该怎么做才能修复它。
谢谢 :)
解决方案
我挂钩了 MPVolumeControllerSystemDataSource的方法_systemVolumeDidChange并且在iOS 15.0(至少 beta2)中,通知名称已更改为SystemVolumeDidChange,这是新的通知结构:
{
AudioCategory = "Audio/Video";
Reason = ExplicitVolumeChange;
SequenceNumber = 1069;
Volume = 0;
}
有两点需要注意:
- 即使您按一次音量按钮,iOS 15(至少在 beta2 中)的此通知也会被调用两次,但它们的 SequenceNumber 是相等的;
- 此通知回调不在主线程上。