聆听音量按钮按下的正确方式(iOS 15)
Posted
技术标签:
【中文标题】聆听音量按钮按下的正确方式(iOS 15)【英文标题】:Listen to volume button presses the correct way (iOS 15) 【发布时间】:2021-07-18 21:30:03 【问题描述】:我用过
NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged(_:)), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
过去听音量控制变化,但在 ios 15 中不再适用。
下面的替代代码仅在您不关心用户在最大音量时按下音量时才有效。但是,我确实想知道每次按下按钮。
AVAudioSession.sharedInstance().addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil)
即使音量处于最大/最小,聆听用户按下音量控制按钮的正确方法是什么?
【问题讨论】:
你应用解决方案了吗?修好了吗? 【参考方案1】:您需要为此使用媒体播放器库。
只需import MediaPlayer
let volumeView = MPVolumeView(frame: CGRect.zero)
self.view.addSubview(volumeView)
无论音量大小,您都会收到每次按下的事件
【讨论】:
它在 iOS 15.1.1 中不工作【参考方案2】:我认为这是 Detect hardware volume button press when volume not changed 的副本。
他们只是import MediaPlayer
然后:
let volumeView = MPVolumeView(frame: CGRect.zero)
self.view.addSubview(volumeView)
NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged(_:)), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
@objc func volumeChanged(_ notification: NSNotification)
if let volume = notification.userInfo!["AVSystemController_AudioVolumeNotificationParameter"] as? Float
print("volume: \(volume)")
这将输出:
volume: 0.8125
volume: 0.875
volume: 0.9375
volume: 1.0
volume: 1.0
volume: 1.0
volume: 1.0
记得导入 MediaPlayer。
另外Jayesh Patel’s answer 又短又准确,所以你也可以使用它。
【讨论】:
iOS 15.0.2 上似乎没有调用此通知。有谁知道可能是什么问题?以上是关于聆听音量按钮按下的正确方式(iOS 15)的主要内容,如果未能解决你的问题,请参考以下文章