AVAudioSession的OutputVolume永远不会改变

Aha*_*uhe 6 ios avaudiosession

SO上有很多问题和答案,这[AVAudioSession sharedInstance].outputVolume是检测设备音量的唯一方法.但它似乎没有正常工作.outputVolume永远不会改变,尽管它在第一次设置时是正确的(在应用程序启动时).

我做错了吗?除了阅读价值之外,我不知道还能做什么outputVolume.我的直觉会告诉我这是一个错误,如果不是因为其他人似乎做得很好.我还在iOS 7和8上测试了它,所以它不是iOS 8的bug.我在一个小型测试项目中重现了同样的事情,所以我的项目中没有任何东西干扰它.

另外:我很清楚铃声音量和音量之间的区别.我改变了两个,报告的数量仍然没有改变.

这是我在测试项目中使用的函数:

- (void)checkVolume
{
    float volume = [AVAudioSession sharedInstance].outputVolume;

    NSLog(@"Volume: %f", volume);

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
    {
        [self checkVolume];
    });
}
Run Code Online (Sandbox Code Playgroud)

Yar*_*sim 20

使用KVO,并确保激活sharedInstance:

[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)

  • 我知道了.秘密在于`[[AVAudioSession sharedInstance] setActive:YES error:nil];`.这是我必须在`outputVolume`改变之前调用的.非常感谢你 (2认同)