问题描述
NotificationCenter.default.addobserver(self,selector: #selector(volumeChanged),name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"),object: nil)
当我更新到 iOS 15 时,我发现此代码不起作用,但对于任何以前的 iOS 版本它都有效。
这是 iOS 15 的错误吗?如果是,我可以做些什么来修复它。
谢谢:)
解决方法
我连接了 MPVolumeControllerSystemDataSource 的方法 _systemVolumeDidChange 并且在 iOS 15.0(至少 beta2) 通知名称已更改为 SystemVolumeDidChange ,这是新的通知结构:
{
AudioCategory = "Audio/Video";
Reason = ExplicitVolumeChange;
SequenceNumber = 1069;
Volume = 0;
}
有两点需要注意:
- 即使您按一次音量按钮,iOS 15(至少在 beta2 中)的此通知也会被调用两次,但它们的 SequenceNumber 是相等的;
- 此通知回调不在主线程中。
您正在执行的操作不受支持,因此如果它不适用于所有系统,这并不奇怪。正确记录的方法是在音频会话 outputVolume
属性上使用 KVO:https://developer.apple.com/documentation/avfaudio/avaudiosession/1616533-outputvolume