中断后我是否必须重置音频会话属性?

时间:2013-09-05 19:04:51

标签: ios session audio

我正在实现音频会话中断的C侦听器。当它被调用中断时,我会停用我的音频会话。然后当我的应用程序恢复时,我会再次激活音频会话。我为我的音频会话设置了许多属性和类别,重新激活后是否必须重置所有内容?

提前致谢。

一些参考代码:

初始化,设置类别:

OSStatus error = AudioSessionInitialize(NULL, NULL, interuptListenerCallBack, (__bridge void *)(self));
UInt32 category = kAudioSessionCategory_PlayAndRecord;
error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
if (error) printf("couldn't set audio category!");
//use speaker as default
UInt32 doChangeDefaultOutput = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultOutput), &doChangeDefaultOutput);
//allow bluethoothInput 
UInt32 allowBluetoothInput = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, sizeof(allowBluetoothInput), &allowBluetoothInput);

interuptListenerCallBack是我因为中断而停用和响应音频会话的地方,使用

 OSStatus error = AudioSessionSetActive(false);
 if (error) printf("couldn't deactivate audio session!");

  OSStatus error = AudioSessionSetActive(true);
  if (error) printf("AudioSessionSetActive (true) failed");

1 个答案:

答案 0 :(得分:3)

如果您正确使用音频会话中断侦听器,那么不,您不必重置属性。您只需要确保实际拨打kAudioSessionBeginInterruptionkAudioSessionEndInterruption。我不确定你的听众是什么样的,但如果你做的是这样的话:

if (inInterruptionState == kAudioSessionBeginInterruption) {
        AudioSessionSetActive(NO);
    }
    if (inInterruptionState == kAudioSessionEndInterruption) {

        AudioSessionSetActive(YES);
    }

并且遵循音频会话的规则,理论上,您不必重置您的属性。

我不知道您使用的是什么音频会话,但您也可以使用以下命令暂停和恢复播放:

kAudioSessionInterruptionType_ShouldResume 

kAudioSessionInterruptionType_ShouldNotResume.

您可以按照文档中所述使用这些:

kAudioSessionInterruptionType_ShouldResume
     

表示刚刚结束的中断是一个   适合立即恢复播放;例如,   用户拒绝来电。

     

适用于iOS 4.0及更高版本。

     

在AudioSession.h中声明。

kAudioSessionInterruptionType_ShouldNotResume
     

表示刚刚结束的中断是不适合恢复播放的中断;例如,你的应用程序   被iPod播放打断了。

     

适用于iOS 4.0及更高版本。

     

在AudioSession.h中声明。

您应该阅读docs,因为有很多关于暂停,恢复和处理AudioSession中断的信息。

注意:

自iOS7以来,AudioSession已被弃用。请改用AVAudioSession方法,或者通过设置常量AVAudioSessionInterruptionOptionsAVAudioSessionInterruptionType来设置暂停和恢复选项。

(自iOS 6开始提供)