iOS 系统媒体音量

iOS 媒体音量获取以及控制

获取系统音量

// 需要引入
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
CGFloat systemVolume = audioSession.outputVolume;
复制代码

调整系统音量

iOS7 之后,可以使用系统提供的MPVolumeView(需要引入来控制系统媒体音量。这个控件创建以后,放到视图的可视区域之外,然后通过遍历获取到私有属性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];
    }
}
复制代码

你可能感兴趣的:(iOS 系统媒体音量)