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

Flutter中Glob检索MP3文件无结果,相关日志含义咨询

MP3文件检索无结果排查与日志解释

一、文件检索无结果的排查方案

你的代码存在几个可能导致无返回结果的问题,逐一排查:

1. Glob匹配模式的大小写问题

你使用的"**.mp3"是大小写敏感的,如果目标目录下存在.MP3大写后缀的文件,会匹配失败。修改为大小写不敏感的模式:

Stream<File> searchAudioFiles(Directory dir) {
  return Glob("**.mp3", caseSensitive: false)
      .list(root: dir.path)
      .where((entity) => entity is File)
      .cast<File>();
}

也可以用通配符兼容大小写:"**.[mM][pP]3"。

2. Android存储权限缺失

Android 10及以上版本对外部存储访问有严格限制:

  • Android 13+:需要申请READ_MEDIA_AUDIO权限
  • Android 10-12:需要申请READ_EXTERNAL_STORAGE权限,若访问公共目录(如Download、Music),可能需要用MediaStore API而非直接文件路径访问
  • 若需访问任意目录,还需申请MANAGE_EXTERNAL_STORAGE权限(需在应用商店说明用途)
    确认你已在AndroidManifest.xml中声明权限,并完成运行时动态申请。

3. 目标目录路径错误

先打印dir.path确认传入的目录是否正确,手动检查该目录下是否确实存在MP3文件。比如如果传入的是应用私有目录,而MP3文件在公共存储,自然无法找到。

4. Glob递归逻辑验证

虽然**理论上匹配任意子目录,但部分版本的glob包可能需要显式指定递归:

Glob("**.mp3").list(root: dir.path, recursive: true)

5. 文件实体判断优化

增加存在性检查,避免匹配到已删除或无效的文件实体:

.where((entity) => entity is File && entity.existsSync())

二、日志含义解释

你看到的两条日志和文件检索功能无关:

  • I/ExoPlayerImpl(23190): Init 85a779e [ExoPlayerLib/2.17.1] [TECNO-KD7, TECNO KD7, TECNO MOBILE LIMITED, 29]:这是ExoPlayer库的初始化日志,说明你的应用中使用了ExoPlayer(版本2.17.1),并在TECNO-KD7设备上完成了一个播放器实例的初始化,属于正常信息日志。
  • W/ons.luja(23190): Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (greylist, reflection, allowed):这是Android系统的警告日志,提示应用通过反射调用了系统隐藏的AudioTrack.getLatency()方法。该方法属于灰名单API,当前允许反射调用,但未来版本可能被限制,一般是ExoPlayer内部逻辑触发,无需手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:26