聆听音量按钮按下的正确方式(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)的主要内容,如果未能解决你的问题,请参考以下文章

标签在按钮上,如何在iOS7中突出显示按钮按下的文本?

按下音量按钮时更改音量滑块位置

检测音量按钮即使在音量最大时按下

音量未更改时检测硬件音量按钮按下

如何检测按下的按钮并将其显示在另一个视图上? Objective-C

phonegap 单键按正确方式无多点触控干扰