You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15系统下SystemVolumeDidChangeNotification不再触发问题求助

iOS 15+ 系统音量变化通知无法触发解决方案

iOS 15 起苹果收紧了私有通知 AVSystemController_SystemVolumeDidChangeNotification 的触发权限,iOS 14 中通过 beginReceivingRemoteControlEvents 触发通知的绕过方式已失效。以下是两种可行解决方案,优先推荐第一种官方合规方案:


方案1:使用 AVAudioSession outputVolume KVO 监听(官方推荐)

该方案为苹果公开支持的监听方式,兼容性覆盖 iOS 7 及以上全版本,不存在私有API被限制的风险,也不会触发审核问题。

实现步骤

  1. 声明观察者属性持有KVO监听对象,避免被自动释放:
private var volumeObserver: NSKeyValueObservation?
  1. 在需要开始监听的位置激活音频会话并开启监听:
do {
    let audioSession = AVAudioSession.sharedInstance()
    try audioSession.setActive(true)
    // 监听音量属性变化
    volumeObserver = audioSession.observe(\.outputVolume, options: [.new]) { [weak self] _, change in
        guard let self = self, let newVolume = change.newValue else { return }
        // 此处处理音量变化逻辑
        print("当前系统音量:\(newVolume)")
    }
} catch {
    print("音频会话激活失败:\(error.localizedDescription)")
}
  1. 不需要监听时及时销毁观察者,释放资源:
deinit {
    volumeObserver?.invalidate()
    do {
        try AVAudioSession.sharedInstance().setActive(false)
    } catch {
        print("音频会话停用失败:\(error.localizedDescription)")
    }
}

方案2:调整私有通知适配逻辑(不推荐)

如果必须沿用原有通知监听逻辑,可通过调整音频会话配置适配iOS 15+,但该方案使用私有API,后续系统版本仍有被限制的风险:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    do {
        // 新增音频会话类别配置
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
        try AVAudioSession.sharedInstance().setActive(true)
        UIApplication.shared.beginReceivingRemoteControlEvents()
        NotificationCenter.default.addObserver(self, selector: #selector(volumeChange(_:)), name: Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
    } catch {
        print(error.localizedDescription)
    }
}

注意事项

  • 如果需要应用在后台时也能监听音量变化,需要在项目配置中开启「Audio, AirPlay, and Picture in Picture」后台权限
  • 若应用本身不需要播放音频,建议优先使用方案1,避免占用音频会话影响其他APP的音频播放

内容的提问来源于stack exchange,提问作者XYZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:05