2014-07-21 15 views
6

Es gibt viele Fragen und Antworten zu SO, die sagen [AVAudioSession sharedInstance].outputVolume ist die einzige Möglichkeit, das Volumen eines Geräts zu erkennen. Aber es scheint nicht ganz richtig zu funktionieren. outputVolume ändert sich nie, obwohl es korrekt ist, wenn es zum ersten Mal gesetzt wird (beim Start der Anwendung).AVAudioSessions OutputVolume ändert sich nie

Mache ich es falsch? Ich weiß nicht, was ich neben dem Wert von outputVolume noch tun soll. Meine Instinkte würden mir sagen, dass dies ein Fehler war, wenn es nicht die Tatsache wäre, dass other people es anscheinend gut macht. Ich habe es auch auf iOS 7 und 8 getestet, also ist es kein iOS 8 Bug. Ich habe das gleiche in einem kleinen Testprojekt reproduziert, also stört nichts in meinem Projekt es.

Auch: Mir ist der Unterschied zwischen Klingellautstärke und Lautstärke durchaus bekannt. Ich habe beide geändert, und das gemeldete Volumen hat sich noch nicht geändert.

Hier ist die Funktion, die ich in meinem Test-Projekt verwendet:

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

Antwort

18

Verwenden KVO, und stellen Sie sicher, dass die sharedInstance aktivieren: siehe

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

ich. Das Geheimnis lag in der Zeile '[[AVAudioSession sharedInstance] setActive: YES error: nil];'. Das muss ich aufrufen, bevor sich 'outputVolume' ändert. Vielen Dank – Ahauehauehauhe

+1

Ich musste mir viele falsche SO-Antworten ansehen, bevor ich diese fand. Es sollte viel höher bewertet werden. –

+1

Ich habe immer noch ein Problem, bei dem KVO auf outputVolume scheinbar nicht mehr funktioniert, nachdem meine App den Fokus verloren hat (also grundsätzlich, wenn meine Audiositzung zurückgesetzt wird), selbst wenn ich den Beobachter neu registriere. – Ryan