iOS开发中切换扬声器或听筒使用的是AVAudioSession这个类。
AVAudioSession
一个单独对象,用于向iOS表达app使用音频的意图以及设置app的音频上下文。
主要功能:
1.激活或者取消激活app的音频会话
2.设置音频会话类型
3.配置音频采样率、I / O的缓冲时间和频道
4.对重要的音频事件作出响应,例如改变底层媒体进程的响应。
切换听筒/扬声器用到的主要方法:
1.单例方法,用于实例化
//返回一个单例的AVAudioSession对象
+ (AVAudioSession *)sharedInstance;
2.设置输出端口的方法
- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError * _Nullable *)outError;
其中portOverride参数有2个可选参数:
AVAudioSessionPortOverrideNone:我的理解是将音频输出设置听筒,系统默认应该就是听筒,因为官方文档给出的解释是:
AVAudioSessionPortOverrideSpeaker:音频输出设置为扬声器。
3.App占用听筒或扬声器
由于你的APP使用音频通道时其他App可能正在使用它,所以需要调用这个方法。
- (BOOL)setActive:(BOOL)active error:(NSError * _Nullable *)outError;
使用方法:
//拿到AVAudioSession的单例对象
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
//设置为听筒模式
//[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
//设置为公放模式
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
//让我的App占用听筒或扬声器
[audioSession setActive:YES error:nil];