iOS 媒体音量获取以及控制
获取系统音量
// 需要引入<AVFoundation/AVFoundation.h>
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
CGFloat systemVolume = audioSession.outputVolume;
调整系统音量
iOS7 之后,可以使用系统提供的MPVolumeView(需要引入<MediaPlayer/MediaPlayer.h>)
来控制系统媒体音量。这个控件创建以后,放到视图的可视区域之外,然后通过遍历获取到私有属性MPVolumeSlider
,然后通过自己创建的UISlider
来对应改变MPVolumeSlider
的 Value,这样就能达到控制系统媒体音量的目的。
/// 系统提供的获取音量的控件
@property (nonatomic, strong) MPVolumeView *volumeView;
/// 从上一个控件遍历得到的 Slider
@property (nonatomic, weak) UISlider *mpVolumeSlider;
/// 自己的 Slider
@property (nonatomic, strong) UISlider *volumeSlider;
_volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-1000, -100, 100, 100)];
[_volumeView setShowsVolumeSlider:YES];
_volumeView.showsRouteButton = NO;
[_volumeView sizeToFit];
[self addSubview:_volumeView];
[_volumeView userActivity];
for (UIView *subView in [_volumeView subviews]) {
if ([subView.class.description isEqualToString:@"MPVolumeSlider"]){
_mpVolumeSlider = (UISlider*)subView;
break;
}
}
监听系统媒体音量变化
通过注册通知AVSystemController_SystemVolumeDidChangeNotification
来监听系统音量的改变,来对应自定义 UI 的改变。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(systemVolumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
- (void)systemVolumeChanged:(NSNotification *)notification {
if([[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"] isEqualToString:@"ExplicitVolumeChange"]) {
float volume = [[[notification userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
[self.volumeSlider setValue:volume animated:YES];
}
}