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,
  ));
}