configureAudioSession static method
dynamic
configureAudioSession()
配置音频会话
Implementation
static configureAudioSession() async {
Log.i(tag,"configureAudioSession");
//配置音频会话
/*
获取当前的音频会话:通过AudioSession.instance获取当前的音频会话,将其赋值给session变量。
配置音频会话:调用session.configure()方法来配置音频会话参数,包括:
avAudioSessionCategory:设置音频会话的类别,这里使用AVAudioSessionCategory.playAndRecord表示同时播放和录制音频。
avAudioSessionCategoryOptions:设置音频会话的选项,包括允许蓝牙、默认使用扬声器、与其他应用混音等。
avAudioSessionMode:设置音频会话的模式,这里使用AVAudioSessionMode.spokenAudio表示语音模式。
avAudioSessionRouteSharingPolicy:设置音频会话的路由分享策略,这里使用AVAudioSessionRouteSharingPolicy.defaultPolicy表示默认策略。
androidAudioAttributes:设置Android平台上的音频属性,包括内容类型、标志和使用场景等。
contentType:设置音频内容类型,这里使用AndroidAudioContentType.speech表示语音内容。
flags:设置音频标志,这里使用AndroidAudioFlags.none表示没有任何标志。
usage:设置音频使用场景,这里使用AndroidAudioUsage.voiceCommunication表示语音通信场景。
androidAudioFocusGainType:设置Android平台上的音频焦点类型,这里使用AndroidAudioFocusGainType.gain表示获取音频焦点。
androidWillPauseWhenDucked:设置当设备进入静音模式时,应用程序是否暂停播放。
如果当前已经存在一个音频会话,则不再进行配置,避免重复配置。
*/
final session = await AudioSession.instance;
await session.configure(AudioSessionConfiguration(
// 音频会话类别:同时支持播放和录音(如对讲、通话场景)
avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
avAudioSessionCategoryOptions:
// 允许使用蓝牙设备(如蓝牙耳机)
AVAudioSessionCategoryOptions.allowBluetooth |
// 默认使用扬声器(而非听筒)
AVAudioSessionCategoryOptions.defaultToSpeaker|
// 允许与其他应用音频混合播放(不中断其他音频)
AVAudioSessionCategoryOptions.mixWithOthers,
// 模式:优化语音类音频(如对话、对讲)
avAudioSessionMode: AVAudioSessionMode.spokenAudio,
avAudioSessionRouteSharingPolicy:
// 路由共享策略:默认(系统自动管理音频设备切换)
AVAudioSessionRouteSharingPolicy.defaultPolicy,
// 激活时无特殊选项
avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none,
//Android 平台配置
androidAudioAttributes: const AndroidAudioAttributes(
// 音频类型:语音(系统会优化语音清晰度)
contentType: AndroidAudioContentType.speech,
// 无特殊标记
flags: AndroidAudioFlags.none,
// 用途:语音通信(如电话、对讲)
usage: AndroidAudioUsage.voiceCommunication,
),
// 获取音频焦点的方式:完全获取(可能中断其他音频)
androidAudioFocusGainType: AndroidAudioFocusGainType.gain,
// 当被其他音频“压低音量”时,是否暂停当前音频(如来电时暂停对讲)
androidWillPauseWhenDucked: true,
));
}