2014-07-21 26 views
6

Istnieje wiele pytań i odpowiedzi na temat SO, które mówią, że [AVAudioSession sharedInstance].outputVolume jest jedynym sposobem na wykrycie głośności urządzenia. Ale wydaje się, że nie działa to dobrze. outputVolume nigdy się nie zmienia, ale jest poprawny, gdy jest ustawiony jako pierwszy (przy uruchamianiu aplikacji).OutputVolume AVAudioSession nigdy się nie zmienia

Czy robię to źle? Nie wiem, co jeszcze można zrobić, oprócz czytania wartości outputVolume. Moje instynkty podpowiedziały mi, że to błąd, jeśli nie z powodu tego, że other people wydaje się to robić dobrze. Testowałem również na iOS 7 i 8, więc nie jest to błąd systemu iOS 8. Powieliłem to samo w małym projekcie testowym, więc nic w moim projekcie nie ingeruje w to.

Ponadto: dobrze zdaję sobie sprawę z różnicy między głośnością dzwonka a głośnością dźwięku. Zmieniłem oba, a zgłoszony wolumin nadal się nie zmienił.

Oto funkcja użyłem w moim projekcie badania:

- (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]; 
    }); 
} 

Odpowiedz

18

Zastosowanie KVO i upewnij się, aby uaktywnić sharedInstance: Widzę

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil]; 
+2

. Sekret znajdował się w wierszu '[[AVAudioSession sharedInstance] setActive: YES error: nil];'. To jest to, co muszę wywołać przed zmianą parametru "outputVolume". Bardzo dziękuję – Ahauehauehauhe

+1

Musiałem spojrzeć na wiele fałszywych odpowiedzi na SO, zanim znalazłem ten. Powinno być ocenione znacznie wyżej. –

+1

Ciągle mam problem, w którym KVO na outputVolume wydaje się przestać działać po tym, jak moja aplikacja straci ostrość (tak w zasadzie, gdy moja sesja audio jest resetowana), nawet jeśli ponownie zarejestruję obserwatora. – Ryan

Powiązane problemy