iOS 中音量控制解惑

iOS 中对音量的控制其实也有好多小窍门,这个小集帮你解惑。iOS 中主要有2个地方可以控制音量,一个是系统音量,用户主动按音量键调整音量,这种方式会显示系统音量提示框;另一个是播放器的音量,比如通过 AVAudioPlayer 调整音量,这种不会显示系统提示音量框。

[1] 如何在调节音量时不显示系统音量提示框
主要原理就是获取系统音量 View,并把它让用户不可见。但注意一点,你不能把 MPVolumeView 的 hidden 属性设置为 YES,这样导致的结果是用户调整音量时任然会显示系统音量提示框。 【图一】

[2] 获取系统音量
方法一:通过 self.volumeSlider 获取
如果想获取系统音量,可以通过第一种方式中的 self.volumeSlider.value 来获取,但是你发现第一次为 0,这很纠结,这样导致的结果就是获取的系统音量不准确。这是因为初始 MPVolumeView 时,volumeSlider.value 还没有赋值,通过【图2】可以发现,音量是后来通过 [MPVolumeController updateVolumeValue] 来更新的。所以我们可以通过监听 self.volumeSlide 值改变时的事件,达到获取系统音量的目的。

[self.volumeSlider addTarget:self action:@selector(sliderValueDidChange:) forControlEvents:UIControlEventValueChanged];

方法二:通过 AVAudioSession 获取
这种方法直接了当。
[[AVAudioSession sharedInstance] outputVolume];

[3] 自定义音量控件
如果想自定义音量控件,可以监听音量的变化,并且通过第一种方法隐藏系统音量提示框。通过监听通知,达到监听音量变化的效果。

[4] 监听音量变化
监听音量变化,通过监听通知 AVSystemController_SystemVolumeDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];

最终结果 AVSystemController_AudioVolumeNotificationParameter 表示音量的值,这里需要注意的是 "AVSystemController_AudioVolumeChangeReasonNotificationParameter" = ExplicitVolumeChange; 这个值,它表示音量改变的原因。需要注意的是有些情况它并不会修改系统音量。它会由于不同的场景,有不同的值。ExplicitVolumeChange 是用户点击音量按钮,CategoryChange 是用户按 home 键调起 Siri,RouteChange 这个是路线修改(不太清楚,什么情况下触发的)。

AVSystemController_SystemVolumeDidChangeNotification; object = <AVSystemController: 0x1c4001dc0>; userInfo = {
"AVSystemController_AudioCategoryNotificationParameter" = "Audio/Video";
"AVSystemController_AudioVolumeChangeReasonNotificationParameter" = ExplicitVolumeChange;
"AVSystemController_AudioVolumeNotificationParameter" = "0.5625";
"AVSystemController_UserVolumeAboveEUVolumeLimitNotificationParameter" = 0;
}}

[5] 注意点
如果通过代码修改了 self.volumeSlide 的 value,那么会显示出系统音量框,如果你发现某个页面突然蹦出一个系统音量框,原因大多数是你修改了这个值。

更多知识小集的内容,请查看:timeline_card_small_web_default.png网页链接
 

转载于:https://my.oschina.net/u/2345393/blog/1602983

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值