iOS7以上均可用,采用KVO方式
0.导入头文件
1
| #import <AVFoundation/AVAudioSession.h>
|
1.添加音量监听,KVO
1 2 3 4 5 6 7
| - (void)addAudioListen { [[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:(void *)[AVAudioSession sharedInstance]]; }
|
2.判断是否处理本次通知
因为这个通知可能会发送多次,所以我们需要确认通知名,keypath
名,以及value
变化
当old
>new
则是减小音量,反之则是加大音量
注意,第一次调用这个方法时,不论你之前音量是多少,old
值都为0,所以此时要注意过滤
1 2 3 4 5 6 7 8 9
| - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { if (object == [AVAudioSession sharedInstance] && [keyPath isEqualToString:@"outputVolume"]) { float new = [change[@"new"] floatValue]; float old = [change[@"old"] floatValue]; #your code here } }
|
3.移除监听
1 2 3
| - (void)removeAudioListen{ [[AVAudioSession sharedInstance] removeObserver:self forKeyPath:@"outputVolume"]; }
|