获取系统音量

#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);
volumeZero.png

但是问题来了,获取的音量一直是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);
    });
volume.png

我那可爱可亲的小iphone啊,还有我那台天生丽质的小mac,是我冤枉你们啦!!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容