OutputVolume AVAudioSession никогда не меняется
есть много вопросов и ответов на так сказать [AVAudioSession sharedInstance].outputVolume
- единственный способ определить громкость устройства. Но, кажется, это работает не совсем правильно. outputVolume
никогда не изменяется, хотя это правильно, когда он впервые установлен (при запуске приложения).
Я делаю это неправильно? Я не знаю, что еще делать, кроме как читать значение outputVolume
. Мои инстинкты говорят мне, что это ошибка, если бы не тот факт, что других людей кажется, все в порядке. Я также протестировал его на iOS 7 и 8, так что это не ошибка iOS 8. Я воспроизвел то же самое в небольшом тестовом проекте, поэтому ничто в моем проекте не мешает ему.
также: я хорошо знаю разницу между громкостью звонка и громкостью звука. Я изменил оба, и сообщенный объем все еще не изменился.
вот функция, которую я использовал в своем тестовом проекте:
- (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];
});
}
2 ответов
используйте KVO и обязательно активируйте sharedInstance
:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil];
Я нахожу, что мне нужно фактически вывести звук для [AVAudioSession sharedInstance].outputVolume, чтобы быть точным.
другими словами - [AVAudioSession sharedInstance].outputVolume немного flakey - вам нужно воспроизвести аудио, чтобы вернуть правильный объем.