2012-12-10 169 views
2

每次啓動AVCaptureSession時,似乎都會觸發iPhone 5上的AVSystemController_SystemVolumeDidChangeNotification事件。iPhone 5上的AVSystemController_SystemVolumeDidChangeNotification

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

有沒有人知道如何解決這個問題?我正在使用這個Observer拍攝音量按鈕(我知道這是一個私人API,但它與默認相機應用程序的功能相同,蘋果通常視而不見......),但只有iPhone 5的每次照相機啓動時都會拍攝一張照片。

+0

你仍然有這個問題?我想使用'AVSystemController_SystemVolumeDidChangeNotification',但我沒有iPhone 5來測試。 – 2013-01-12 22:38:40

+0

是的,不幸的是我試圖解決這個問題在iPhone5上測試,但它似乎很難做到這一點:( – flip79

+0

呃。謝謝。 – 2013-01-13 19:20:36

回答

0

對不起,我無法理解它的工作。我確信蘋果公司在iPhone 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]; 
    } 
}