【问题标题】:Listen to volume button presses the correct way (iOS 15)聆听音量按钮按下的正确方式(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)

即使音量处于最大/最小,聆听用户按下音量控制按钮的正确方法是什么?

【问题讨论】:

  • 你应用解决方案了吗?修好了吗?

标签: ios swift avaudioplayer avaudiosession


【解决方案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 上似乎没有调用此通知。有谁知道可能是什么问题?
猜你喜欢
  • 2019-04-30
  • 2020-03-12
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2017-09-27
相关资源
最近更新 更多