我正在实现音频会话中断的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");
答案 0 :(得分:3)
如果您正确使用音频会话中断侦听器,那么不,您不必重置属性。您只需要确保实际拨打kAudioSessionBeginInterruption
和kAudioSessionEndInterruption
。我不确定你的听众是什么样的,但如果你做的是这样的话:
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方法,或者通过设置常量AVAudioSessionInterruptionOptions
或AVAudioSessionInterruptionType
来设置暂停和恢复选项。
(自iOS 6开始提供)