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

Posted

技术标签:

【中文标题】音量未更改时检测硬件音量按钮按下【英文标题】:Detect hardware volume button press when volume not changed 【发布时间】:2020-01-13 14:44:06 【问题描述】:

我需要检测音量按钮的点击。 Detect volume button press 中的解决方案,我仅在音量改变时才使用。我需要检测音量按钮点击。例如,当声音达到最大级别并且用户单击级别按钮时,此解决方案不起作用。

 let audiosession = AVAudioSession.sharedInstance()
    self.obs = audioSession.observe( \.outputVolume )  (av, change) in
    print("volume \(av.outputVolume)")
 

是否有其他可行的解决方案来检测音量按钮按下?

【问题讨论】:

无论您是否找到检测方法,您都可能需要查看 Apple 的 Review Guidelines - 具体而言:2.5.9 更改或禁用标准开关的功能,例如音量增大/减小和响铃/静音开关,或其他本机用户界面元素或行为将被拒绝。 这能回答你的问题吗? Detect volume button press 我不想更改或禁用标准卷的功能。我只需要检测点击,以防音量没有改变。 Instagram 应用在这种情况下检测音量按钮点击(当音量最大时) ***.com/questions/28471481/detect-volume-button-press 在此解决方案中检测更改音量,并且在音量未更改时不起作用。例如,当声音最大并且用户点击时 【参考方案1】:
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

【讨论】:

此观察者从未调用过 iPhoneXR 和 IOS 13.3 在模拟器中还是在实际设备上? 谢谢你,它的作品。我在执行中犯了错误 *** 上其他主题的最佳解决方案(> 比第 1.0 卷)也被检测到。 别忘了在顶部导入 MediaPlayer。

以上是关于音量未更改时检测硬件音量按钮按下的主要内容,如果未能解决你的问题,请参考以下文章

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

更改设备音量

如何检测音量上下是不是被按下

如何在iOS上获得音量级别和音量更改通知?

通过硬件按钮更改音量时投射图标

如何注册 ContentObserver 以更改媒体音量?