2012-12-10 1 views
2

iPhone5의 AVSystemController_SystemVolumeDidChangeNotification 이벤트가 AVCaptureSession이 시작될 때마다 트리거 된 것으로 보입니다.iPhone 5의 AVSystemController_SystemVolumeDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil]; 

이 문제를 해결하는 방법에 대해 아는 사람이 있습니까? 이 Observer를 사용하여 볼륨 버튼으로 사진을 찍습니다 (개인용 API라는 것을 알고 있지만 기본 카메라 앱과 동일한 기능인 Apple이 일반적으로 눈을 감고 있습니다 ...), 은 iPhone 5에서만 사용 가능 카메라가 시작될 때마다 사진이 촬영됩니다.

+0

는 여전히이 문제가 있습니까를? 'AVSystemController_SystemVolumeDidChangeNotification'을 사용하고 싶습니다만, 테스트 할 iPhone 5가 없습니다. –

+0

예, 불행히도 iPhone5에서이 문제를 테스트하려고 시도했지만 매우 어렵습니다. ( – flip79

+0

고맙습니다. –

답변

0

미안하지만, 나는 현명하게 작동하지 못했습니다. 애플이 아이폰 5에서 이런 식으로 구현 한 이유가 분명하다.

내가 대신 오디오 세션 속성 리스너 방법을 사용, 사용하지하는 것이 었습니다 주위에 발견하는 유일한 방법 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //... 
    AudioSessionInitialize(nil, nil, nil, nil); 
    AudioSessionSetActive(YES); 

    AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume, volumeListenerCallbackIPhone, (__bridge void *)(self)); 
    //... 
} 

을 그리고 콜백에서 :

- (void)volumeChanged:(NSNotification *)notification 
{ 
    NSLog(@"volumeChanged"); 
    // ... 
} 

... 그리고 그런 다음 컨텍스트를 기반으로 이벤트를 필터링하십시오.

-Ken

+1

AudioSessionAddPropertyListener는 대안을 찾을 수 없었지만 iOS 7.0에서는 사용되지 않습니다. – yosei

4

사용이 :

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(volumeChanged:) 
              name:@"AVSystemController_SystemVolumeDidChangeNotification" 
              object:nil]; 

: 그리고

- (void)volumeChanged:(NSNotification*)notification 
{ 
    if([[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"] isEqualToString:@"ExplicitVolumeChange"]) 
    { 
     float volume = [[[notification userInfo] 
         objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
         floatValue]; 
    } 
}