2014-07-21 3 views
6

[AVAudioSession sharedInstance].outputVolume은 장치의 볼륨을 감지하는 유일한 방법이라는 많은 질문과 대답이 있습니다. 그러나 그것은 제대로 작동하지 않는 것 같습니다. outputVolume은 변경되지 않습니다. 처음으로 설정 될 때 올바른 것입니다 (응용 프로그램 시작시).AVAudioSession의 OutputVolume은 절대 변경되지 않습니다

내가 잘못 했습니까? outputVolume의 값을 읽는 외에 무엇을해야할지 모르겠습니다. other people이 그 일을 잘하는 것처럼 보이지 않는다면, 내 본능이 이것이 버그라고 말해 줄 것이다. 또한 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]; 
    }); 
} 

답변

18

사용 KVO는, 그리고 sharedInstance 활성화해야합니다 :

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

내가 참조하십시오. 비밀은'[[AVAudioSession sharedInstance] setActive : YES error : nil];'줄에 있습니다. 이것은'outputVolume'이 변경되기 전에 호출해야하는 것입니다. 고마워요. – Ahauehauehauhe

+1

이걸 발견하기 전에 나는 너무 가짜 답을 찾아야했습니다. 훨씬 더 높은 평가를 받아야합니다. –

+1

나는 여전히 관찰자를 다시 등록하더라도 내 앱이 포커스를 잃은 후에 outputVolume의 KVO가 작동을 멈춘 것처럼 보인다. – Ryan