[IOS] 监听音量变化监听音量按键及隐藏系统音量UI

Posted krosshj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[IOS] 监听音量变化监听音量按键及隐藏系统音量UI相关的知识,希望对你有一定的参考价值。

监听音量变化

似乎并没有一种正式的方式可以监听并覆盖掉系统音量按钮的行为。我们可以使用的是一个对系统音量变化的事件监听。只需要按如下代码添加上监听即可。

func someInit() {
    NotificationCenter.default.addObserver(self, selector: #selector(onVolumnChanged), 
        name: Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
}

func onVolumnChanged(noti: Notification) {
    // do your works
}

当任何音量改变的事件发生时,这个监听都会被触发,据我测试的结果:

  • 按下音量+-键
  • 下拉打开控制面板,调节音量
  • 前后摄镜头切换

还好,监听给的 Notification 对象里面提供了一些有用的参数帮我们区分出这些情况。可以使用
AVSystemController_AudioVolumeChangeReasonNotificationParameter key来获取音量改变的原因。代码如下:

func onVolumnChanged(noti: Notification) {
    let reason = (noti.userInfo?["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String) ?? ""
    if reason == "ExplicitVolumeChange" {
        // 明确的,用户行为的音量改变,比如按下音量键和下拉控制面板调节音量
    }
}

隐藏系统音量UI

另一个问题是当按下音量按键时,UI 上会自动显示出系统的音量条,有些业务需求需要隐藏,其实也很简单,只需要在当前的 viewController 里面的某个 view 中添加上 MPVolumeView ,然后把它的 frame 设置得屏幕外面,就行了。似乎系统会自动找到它,替换掉系统的音量条,这个只针对当前这个 ViewController 有效。跳转到下一个 ViewController,如果需要屏蔽,也需要独立添加。

let mpVolumeView = MPVolumeView()
mpVolumeView.frame = CGRect(x: -500, y: -500, width: 10, height: 10)
addSubview(mpVolumeView)

如果以上内容对你有所帮助,请在这些平台上关注我吧,谢谢。o( ̄▽ ̄)d

以上是关于[IOS] 监听音量变化监听音量按键及隐藏系统音量UI的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android 监听音量键(下)

将主音频音量的变化确定为事件(音量变化监听器)

手机影音第十天,控制屏幕上下滑动改变音量变化,监听物理键改变音量

Flutter - 监听硬件按键。防止默认行为,android

IOS 自定义音量改变UI

监听音量上下键调节音量