【问题标题】:Audio Session Property Listener auto-deactivated in UIImagePickerController?UIImagePickerController 中的音频会话属性侦听器自动停用?
【发布时间】:2011-05-13 07:11:05
【问题描述】:

我正在开发一个相机应用程序,以便在按下音量按钮时拍摄照片。

我使用AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume, audioVolumeChangeListenerCallback, self); 在我的相机启动前按下音量按钮成功获得通知。但是,在我启动相机后,此属性侦听器不再起作用。它是自动停用还是什么?

我尝试实现自定义 UIImagePickerController 以在 ImagePickerController 中包含音频会话属性侦听器,但没有希望。如果有人可以分享您的观点,不胜感激。谢谢。

【问题讨论】:

    标签: iphone xcode button camera


    【解决方案1】:

    即使在 iPhone 上的默认相机应用中,也不支持调高/调低音量。可能是它们在打开相机时阻止了这些按钮的输入。他们不阻止的是静音开关。我添加了这个通知,即使在相机打开的情况下也调用了我的回调:

    AudioSessionInitialize(nil, nil, nil, nil);
    AudioSessionSetActive(true);
    AudioSessionAddPropertyListener(
                                    kAudioSessionProperty_AudioRouteChange,
                                    applicationAudioRouteDidChange,
                                    self);
    

    你需要解决的问题是,如果有人插入耳机,'applicationAudioRouteDidChange'方法也会被调用。您可以按照AudioSessionProgrammingGuide 中的说明进行检查:

    当系统调用路由更改回调时,它提供 您需要确定要采取的行动的信息。根据你的 从音频回调 AudioSessionPropertyListener 原型 会话服务,如下所示:

    void MyPropertyListener ( void *inClientData, AudioSessionPropertyID inID,UInt32 inDataSize, const void *inData );

    对于路线更改事件, 系统在inID中发送kAudioSessionProperty_AudioRouteChange 参数。

    发送到回调的 inData 参数包含一个 CFDictionaryRef 描述的对象:

    为什么路线改变了以前的路线是什么

    我这样做了,当静音开关被 mmmm 切换时它会拍照:

    void applicationAudioRouteDidChange(void *inClientData,
                                    AudioSessionPropertyID inID,
                                    UInt32 inDataSize, const void *inData)
    {
    
    
        if ([[(NSDictionary*)inData objectForKey:@"OutputDeviceDidChange_Reason"] intValue] == 5) {
            [((RootViewController*)inClientData).picker takePicture];
        }
    
        // Do something like reset the system
    }
    

    正如 Tom 所说,您尝试实现的功能将是 iOS 5 的一部分。

    【讨论】:

      【解决方案2】:

      很抱歉,IOS4 不支持此功能。如果您成功地实现了这一点,该应用程序将被苹果拒绝。

      但是在 WWDC 2011 上宣布,这在 IO5 中得到完全支持,并且在任何应用程序中使用 UIImagePickerController 时都将成为默认行为。

      希望这会有所帮助。

      【讨论】:

      • 只有将uiimagepickercontroller的“showsCameraControl”变量设置为YES时才支持
      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2014-11-10
      相关资源
      最近更新 更多