美文网首页iOS开发iOS学习笔记
监听音量键的两种方法

监听音量键的两种方法

作者: 34码的小孩子 | 来源:发表于2016-04-14 13:31 被阅读2492次

1、使用KVO监听属性outputVolume

首先,注册监听

注册监听音量变化

在监听的回调中判断是否是我们监听的属性,所有使用KVO监听的属性都是同一个回调方法,当你子类和父类监听了多个属性,必须进行判断。

当音量增加到最大,或者减低到最小变成静音的时候,系统不会再发送音量改变的消息,就是按下音量键的时候,系统不会调用上面的回调。在iOS7之前可以自己设置音量大小,让音量不会增加到最大或者减少到最低。在iOS7 之后,该方法被弃用。

2、使用通知消息机制:

监听AVSystemController_SystemVolumeDidChangeNotification消息。

该消息除了监听音量键之外,应用从后台切换到前台也会发送该消息,所以,还需要判断消息的userInfo的字段AVSystemController_AudioVolumeChangeReasonNotificationParameter,确定发送消息的理由,value值为ExplicitVolumeChange就是我们所需要的。

3、注意:

使用以上两种方法监听音量键,在用户按下音量键的时候,还是会显示系统的音量键弹出框,也会改变系统的音量大小。我们可以自定义一个弹框,放置在屏幕外面,并且显示。这样就会优先显示我们自定义的弹框,不会显示系统自带的。如果自定义的弹框hidden 为YES,也是会弹出系统的提示框。

避免改变系统的音量大小的方法还没找到,以我的理解,无论是上面的KVO还是消息通知都是在系统改变音量之后才会发送消息的。

相关文章

网友评论

  • coooliang:volumeView不能hidden
    coooliang:@34码的小孩子 物理的静音键 有办法监听么?我没有找到这个事件的监听方法哦。
    coooliang:@34码的小孩子 不不,我的意思是这个hidden属性不要设置为YES,只要设置到屏幕外就可以了。我设置了以后反而不能用了。
    34码的小孩子:@coooliang 需要自定义一个音量框,并且放在屏幕外面。
  • 吃方便面的小浣熊:静音怎么监听啊
    34码的小孩子:@吃方便面的小浣熊 这种方法监听不了哦
  • 加拉隆的深渊之核:亲,如果区分上+号还是-号啊
    加拉隆的深渊之核:@34码的小孩子 嗯嗯,谢谢你咯
    34码的小孩子:获取系统音量保存起来,然后接收到通知的时候,跟上一次保存的音量值进行判断,应该是可以的。
  • KayMo:隐藏了音量,但是铃声音量框会出现,如何是好?
    ccfecba7f358:@KayMo 老铁 你的铃声框消失是怎么处理的
    KayMo:音量框消失了,但是铃声框还在啊
    34码的小孩子:@kaka_09 这不是跟上面的评论一样的么?需要自定义MPVolumeView对象的提示框。
  • 学_iOS:音量界面隐藏不了怎么办
    学_iOS:@34码的小孩子 原来如此 好的 谢谢啦 !
    34码的小孩子:@学_ios 如果用户自定义了提示框,会优先显示自定义的哦。要注意的是自定义的一定要是MPVolumeView的对象哦,不然系统不会显示自定义的,还是会显示系统的。

本文标题:监听音量键的两种方法

本文链接:https://www.haomeiwen.com/subject/jwyglttx.html