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

audioplayers包在Chrome DevTool正常但Android设备报错的解决求助

解决Android上audioplayers播放本地音频文件找不到的问题

核心问题分析

错误提示ENOENT (No such file or directory)的根本原因是使用了错误的Source类型加载本地资产文件:你用UrlSource加载Flutter项目内的asset资源,但UrlSource仅适用于网络URL或设备本地文件系统路径,无法识别Flutter的asset资源结构。Chrome能正常播放是因为Web端对路径的解析逻辑与Android不同。

修复步骤

1. 替换为正确的Source类型

将UrlSource改为AssetSource——这是audioplayers专门用于加载Flutter asset资源的类型,同时注意路径要去掉lib/前缀:

GestureDetector(
    onTap: () async {
        final player = AudioPlayer();
        await player.play(AssetSource('audio/warm-piano-logo-116098.mp3'));
    },
    child: Container(
      margin: const EdgeInsets.only(top: 10),
      width: 80,
      height: 30,
      decoration: BoxDecoration(
        color: const Color(0xffde9b8d),
        borderRadius: BorderRadius.circular(15)),
          child: const Center(child: 
          Text('Notation', 
          style: TextStyle(
            color: Colors.black, 
            fontWeight: FontWeight.bold),)),
    ),
)

2. 验证pubspec.yaml的asset配置

确保pubspec.yaml中已正确声明音频资源,格式如下:

flutter:
  assets:
    - assets/audio/warm-piano-logo-116098.mp3
    # 若audio目录下有多个文件,可使用通配符批量声明:
    # - assets/audio/

注意缩进:assets需嵌套在flutter:节点下,每一项前保持2个空格的缩进。

3. 清理缓存并重新构建

Android可能缓存旧资源,执行以下步骤确保资源正确打包:

  • 停止当前运行进程
  • 执行flutter clean清理项目缓存
  • 重新运行项目:flutter run

额外注意事项

  • Android对路径大小写敏感,确保文件名和路径的大小写与实际文件完全一致(Chrome通常不区分大小写)。
  • 避免每次点击都创建新的AudioPlayer实例,建议全局复用或管理实例生命周期,防止内存泄漏。

内容的提问来源于stack exchange,提问作者Im Onforum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:39:49