系统音量变化观察器不适用于 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;
}

有两点需要注意:

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

您正在执行的操作不受支持,因此如果它不适用于所有系统,这并不奇怪。正确记录的方法是在音频会话 outputVolume 属性上使用 KVO:https://developer.apple.com/documentation/avfaudio/avaudiosession/1616533-outputvolume

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...