在 iOS 的每个版本中,更多的 audioSession 属性都迁移到了 AVFoundation,因此您应该在可用时优先使用这些属性。
由于 iOS 6kAudioSessionProperty_OverrideAudioRoute
是通过 AVAudioSession 方法表示的
- (BOOL)overrideOutputAudioPort:error:
可用值是AVAudioSessionPortOverrideNone
和AVAudioSessionPortOverrideSpeaker
这是一个完全通过 AVFoundation 配置的示例音频会话:
- (void)configureAVAudioSession
{
// Get your app's audioSession singleton object
AVAudioSession *session = [AVAudioSession sharedInstance];
// Error handling
BOOL success;
NSError *error;
// set the audioSession category.
// Needs to be Record or PlayAndRecord to use audioRouteOverride:
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
error:&error];
if (!success) {
NSLog(@"AVAudioSession error setting category:%@",error);
}
// Set the audioSession override
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if (!success) {
NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);
}
// Activate the audio session
success = [session setActive:YES error:&error];
if (!success) {
NSLog(@"AVAudioSession error activating: %@",error);
}
else {
NSLog(@"AudioSession active");
}
}
更新
自 iOS 7.0 起,Audio Session Services C API 现已完全弃用,取而代之的是 AVAudioSession。
更新 2
- (BOOL)overrideOutputAudioPort:error:
是一种方法,而不是属性,它设置了一个底层的只写UInt32 值。您无法获取当前值,您应该将该方法视为设置临时状态。如果音频路由更改或中断,该属性将重置为其默认值 ( AVAudioSessionPortOverrideNone
)。您可以通过 获取中断通知AVAudioSessionDelegate
。