每次启动AVCaptureSession时,似乎都会触发iPhone 5上的AVSystemController_SystemVolumeDidChangeNotification
事件。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
有谁知道如何解决这个问题?我正在使用这个观察者用音量按钮拍照(我知道它是一个私有API,但它与默认相机应用程序的功能相同,Apple通常会视而不见......),但仅在iPhone上5 每次相机启动时都会拍摄一张照片。
答案 0 :(得分:5)
使用此:
[[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];
}
}
答案 1 :(得分: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