每次iOS发布新版本,越来越多的audioSession属性被迁移到AVFoundation中,因此在可用时应优先使用它们。
自iOS 6以来,“kAudioSessionProperty_OverrideAudioRoute”在AVAudioSession中通过该方法表示。
- (BOOL)overrideOutputAudioPort:error:
可用的值为AVAudioSessionPortOverrideNone
和AVAudioSessionPortOverrideSpeaker
以下是完全通过AVFoundation配置的音频会话示例:
- (void)configureAVAudioSession
{
AVAudioSession *session = [AVAudioSession sharedInstance];
BOOL success;
NSError *error;
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
error:&error];
if (!success) {
NSLog(@"AVAudioSession error setting category:%@",error);
}
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if (!success) {
NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);
}
success = [session setActive:YES error:&error];
if (!success) {
NSLog(@"AVAudioSession error activating: %@",error);
}
else {
NSLog(@"AudioSession active");
}
}
更新
自iOS 7.0起,音频会话服务C API已经完全弃用,而使用AVAudioSession代替。
更新2
- (BOOL)overrideOutputAudioPort:error:
是一种方法,而不是属性,并设置底层的仅写入 UInt32值。您无法获取当前值,应将该方法视为设置临时状态。如果音频路由更改或中断,则属性将重置为其默认值(AVAudioSessionPortOverrideNone
)。您可以通过AVAudioSessionDelegate
获取中断通知。
AudioSessionGetProperty
已被弃用,但它在iOS 6中仍可用。它在iOS 7中被弃用。这违反了保密协议。 - Cole Tobin