有很多问题和答案说[AVAudioSession sharedInstance].outputVolume
是检测设备音量的唯一方法。但它似乎并没有正常工作。 outputVolume
永远不会更改,但在首次设置时(在应用程序启动时)它是正确的。
我做错了吗?除了阅读outputVolume
的价值之外,我不知道还能做些什么。我的直觉会告诉我这是一个错误,如果不是因为other people似乎做得很好的事实。我也在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];
});
}
答案 0 :(得分:20)
使用KVO,并确保激活sharedInstance
:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil];
答案 1 :(得分:0)
我已在iOS 12中签到:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
float vol = [[AVAudioSession sharedInstance] outputVolume];
NSLog(@"outputVolume: %f", vol);
答案 2 :(得分:-2)
我发现我需要实际输出声音,以便[AVAudioSession sharedInstance] .outputVolume准确。
换句话说-[AVAudioSession sharedInstance] .outputVolume有点小缺点-您需要播放音频才能返回正确的音量。