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

Android使用LexiLabs Sound库播放M4A文件遇ENOENT文件不存在错误求助

问题描述

播放M4A格式媒体文件时触发ENOENT(无此文件或目录)错误,具体异常栈如下:

FATAL EXCEPTION: main
Process: io.eduonline.devrush.devrushlmsmultiplatform.androidApp, PID: 21917
java.io.FileNotFoundException: OUR6G_IgJkCvBg5qurB2Ag/audios/FpHO919GeEOCgM52fnuq9g.m4a: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:574)
at java.io.FileInputStream.(FileInputStream.java:160)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1235)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1213)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1178)
at app.lexilabs.basic.sound.Audio.load(Audio.android.kt:54)

使用LexiLabs basic-sound库,相关代码:

val audio = Audio(audioUrl, false)

其中audioUrl = OUR6G_IgJkCvBg5qurB2Ag/audios/FpHO919GeEOCgM52fnuq9g.m4a

解决方案

1. 修正文件路径格式

当前audioUrl是相对路径,Android无法识别未指定根目录的路径,必须使用绝对路径:

  • 若文件在应用内部存储,路径示例:
    val absolutePath = context.filesDir.path + "/OUR6G_IgJkCvBg5qurB2Ag/audios/FpHO919GeEOCgM52fnuq9g.m4a"
    
  • 若文件在外部存储,需使用外部存储根目录拼接路径,同时确保已申请对应权限。

2. 验证文件实际存在

在加载前先检查文件是否存在,避免无意义的加载操作:

val audioFile = File(absoluteAudioPath)
if (!audioFile.exists()) {
    // 处理文件不存在的情况,比如提示用户或重新下载
    return
}
val audio = Audio(audioFile.path, false)

也可以通过Android Studio的Device File Explorer直接查看对应路径下是否有目标M4A文件。

3. 适配库的参数要求

确认Audio构造函数的参数规则:

  • 第二个参数表示是否为本地文件,若传入的是本地路径,需确保该参数设置正确(通常本地文件传true,网络文件传false);
  • 若音频文件在assets目录,不能直接传assets路径,需要先将文件复制到应用可访问的本地存储目录,再使用复制后的绝对路径加载。

4. 检查存储权限

  • 内部存储无需额外权限,但必须使用应用专属的内部目录(如context.filesDir);
  • 外部存储在Android 10及以上,建议用MediaStore或存储访问框架(SAF)获取文件,避免直接操作路径;
  • Android 13+访问音频文件需申请READ_MEDIA_AUDIO权限,低版本需申请READ_EXTERNAL_STORAGE,且要动态申请权限后再执行加载操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:57:04