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
相关产品推荐
相关产品推荐

