SystemVolumeDidChangeNotification 永远不会在 iOS 14 上触发

Posted

技术标签:

【中文标题】SystemVolumeDidChangeNotification 永远不会在 iOS 14 上触发【英文标题】:SystemVolumeDidChangeNotification never get triggered on iOS 14 【发布时间】:2020-11-02 06:05:30 【问题描述】:

另一个标题是“为什么 AVSystemController_AudioVolumeNotificationParameter 通知事件永远不会被触发?”

目标是监控音量变化事件及其值。按照detect up volume change swift 的指南进行操作。

ios 14.* 上,当我尝试观察音量变化事件时,该事件似乎在音量变化后永远不会被触发。

import MediaPlayer

override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    NotificationCenter.default.addObserver(self, selector: #selector(volumeChange(_:)), name: Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)


@objc func volumeChange(_ notification: NSNotification) 
    let userInfo = notification.userInfo!
    let volume = userInfo["AVSystemController_AudioVolumeNotificationParameter"] as! Double

    print("volume:\(volume)")

【问题讨论】:

【参考方案1】:

需要先调用beginReceivingRemoteControlEvents

override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)

    UIApplication.shared.beginReceivingRemoteControlEvents() // <- THIS LINE

    NotificationCenter.default.addObserver(self, selector: #selector(volumeChange(_:)), name: Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)

在视图消失后不要忘记移除观察者。

【讨论】:

谢谢,我想知道为什么我们在 iOS 14.1 之前不需要使用它。

以上是关于SystemVolumeDidChangeNotification 永远不会在 iOS 14 上触发的主要内容,如果未能解决你的问题,请参考以下文章