#import <MediaPlayer/MediaPlayer.h>
获取系统音量使用了两个方法
方法一
[[AVAudioSession sharedInstance] outputVolume];
使用这种方法能获取到音量信息,但是可能会出现你修改了音量但是获取到的值确一直不更新的情况
这个时候需要首先执行一行代码
[[AVAudioSession sharedInstance] setActive:YES error:nil];
如果还不行呢,怎么办?
那就再来一行,实际上就是使用KVO监听一下系统音量的变化
[volumeView addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil];
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if ([keyPath isEqualToString:@"outputVolume"]) {
//do something
}
}
看看这次行不行,如果不行的话可以试试方法二
方法二
MPVolumeView *volumeView = [[MPVolumeView alloc]init];
[volumeView userActivity];
UISlider *volumeSlider;
for (UIView *view in [volumeView subviews]){
if ([[view.class description] isEqualToString:@"MPVolumeSlider"]){
volumeSlider = (UISlider*)view;
break;
}
}
//获取最是刚打开时的音量值
CGFloat volumeFlo = volumeSlider.value;
NSLog(@"volumeFlo == %f",volumeFlo);
但是问题来了,获取的音量一直是0.000000
怎么办
没成功啊
扯犊子呢啊??
要不要摔手机,砸电脑?????
摔完手机,出去抽袋烟,偶偶,可能是因为取值太早了,要不等他一下吧,给个延时看看
MPVolumeView *volumeView = [[MPVolumeView alloc]init];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[volumeView userActivity];
UISlider *volumeSlider;
for (UIView *view in [volumeView subviews]){
if ([[view.class description] isEqualToString:@"MPVolumeSlider"]){
volumeSlider = (UISlider*)view;
break;
}
}
//获取最是刚打开时的音量值
CGFloat volumeFlo = volumeSlider.value;
NSLog(@"volumeFlo == %f",volumeFlo);
});
我那可爱可亲的小iphone啊,还有我那台天生丽质的小mac,是我冤枉你们啦!!!!