iOS 控制系统音量

iOS没有开放隐式控制音量的api,这或许与其安全策略有关(试想一个app每次启动的时候都会偷偷将你音量开到最大)。
但MediaPlayer提供了一个用于控制音量的UI控件:MPVolumeView,它包含一个UISlider可以用来手动控制音量。
以下是用法:

static let volumeView = MPVolumeView()
//设置静音
class func muteForPhoneToTV(){
          let ary = volumeView.subviews
          DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
          for subView in ary {
              if let slider = subView as? UISlider {
                 slider.setValue(0.0, animated: false)//范围0-1
                 break
              }
            }
        }
    }
//获取音量:
var v:Float = 0.0
for subViews in volumeView.subviews {
      if let slider = subViews as? UISlider {
         v = slider.value
         break
       }
}

MPVolumeView初始化后,直接执行slider.setValue有时会设置失败,推测其中会有异步问题,所以代码中加了一点延时。
注意1:
当我用AVAudioSession.sharedInstance().outputVolume获取音量时,获取到的总是MPVolumeView调整音量前的音量,所以正确的获取音量方法是:获取MPVolumeView的slider.value
注意2:
当设置slider.value时,系统的音量UI(垂直的音量条)会出现。一些资料显示,若不想显示将系统的音量UI条,需要将MPVolumeView添加到UI上。且透明度不能为0,(不知道添加至超出可显示区域的frame行不行)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容