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 - вам нужно воспроизвести аудио, чтобы вернуть правильный объем.