You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用just_audio与audio_session实现音频闪避(audio ducking)的问题

Flutter中使用just_audio与audio_session实现音频闪避(audio ducking)的问题

看起来你已经找对了核心方向,但Android端的音频属性配置细节可能没踩对——我来帮你捋清楚问题出在哪,以及怎么调整:

首先,你当前的配置在iOS端应该是能正常工作的,但Android上因为音频焦点和属性的规则不同,AndroidAudioUsage.notification这个使用场景的优先级和行为逻辑,会导致系统直接暂停其他音频应用而不是触发闪避。咱们一步步改:

1. 调整Android音频属性的Usage值

把AndroidAudioAttributes里的usage从AndroidAudioUsage.notification改成AndroidAudioUsage.game或者AndroidAudioUsage.media,这两个场景的音频流会触发系统的闪避机制,而不是直接抢占焦点。

2. 不要忘记激活音频会话

你可能漏掉了激活配置好的音频会话这关键一步——光配置不激活,所有规则都不会生效。在configure之后必须加上激活的代码。

3. 完整的修正后配置示例

把这些调整整合到你的代码里,最终应该是这样:

final session = await AudioSession.instance;
await session.configure(
  AudioSessionConfiguration(
    avAudioSessionCategory: AVAudioSessionCategory.ambient,
    avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.duckOthers,
    avAudioSessionMode: AVAudioSessionMode.defaultMode,
    androidAudioAttributes: const AndroidAudioAttributes(
      contentType: AndroidAudioContentType.sonification,
      usage: AndroidAudioUsage.game,
      flags: AndroidAudioFlags.none,
    ),
    androidWillPauseWhenDucked: false, // 保持这个设置,避免自己的应用被暂停
  ),
);
await session.setActive(true); // 必须激活会话才能让配置生效

额外的排查点

  • 确保你用的是最新版本的just_audio和audio_session,旧版本可能存在Android端的兼容性bug
  • 一定要用真实Android设备测试,模拟器的音频行为和真机差异很大,很多时候模拟器里的闪避逻辑不会正常触发
  • 部分定制ROM可能对音频焦点有特殊处理,如果测试不同设备结果不一致,可以检查设备的系统音频设置

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:14:36