监听iPhone音量按键操作



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"];
}