如何通过MediaStore访问设备中隐藏文件夹内的媒体文件?
如何通过MediaStore获取隐藏目录中的图片和视频
系统媒体扫描器默认会跳过以点开头的隐藏目录,因此这些目录内的媒体文件不会被MediaStore收录,这就是你的现有代码无法获取到它们的原因。以下是具体的解决方案:
权限配置
根据目标Android版本申请对应存储权限:
- API 29及以下:在Manifest中添加权限声明,运行时申请
READ_EXTERNAL_STORAGE:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> - API 30及以上:添加
MANAGE_EXTERNAL_STORAGE权限声明,并引导用户到系统设置开启「所有文件访问权限」:<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
手动遍历存储获取隐藏目录媒体文件
由于MediaStore不会收录隐藏目录的文件,需要手动遍历外部存储,筛选出符合条件的媒体文件:
Kotlin示例代码
import android.content.Context import android.os.Environment import java.io.File import java.util.Locale // 定义需要筛选的图片/视频MIME类型 private val VALID_MEDIA_TYPES = setOf( "image/jpeg", "image/png", "image/gif", "image/webp", "video/mp4", "video/avi", "video/mkv", "video/webm" ) fun getAllMediaIncludingHidden(context: Context): List<File> { val mediaFiles = mutableListOf<File>() val externalStorage = Environment.getExternalStorageDirectory() // 递归遍历目录 fun scanDirectory(dir: File) { if (!dir.exists() || !dir.isDirectory) return val isHiddenDir = dir.name.startsWith(".") dir.listFiles()?.forEach { file -> if (file.isDirectory) { scanDirectory(file) } else { // 判断文件是否为图片/视频,且位于隐藏目录中 getFileMimeType(file)?.let { mimeType -> if (mimeType in VALID_MEDIA_TYPES && (isHiddenDir || file.parentFile?.name?.startsWith(".") == true)) { mediaFiles.add(file) } } } } } scanDirectory(externalStorage) return mediaFiles } // 根据文件扩展名获取MIME类型 private fun getFileMimeType(file: File): String? { val extension = file.extension.lowercase(Locale.getDefault()) return when (extension) { "jpg", "jpeg" -> "image/jpeg" "png" -> "image/png" "gif" -> "image/gif" "webp" -> "image/webp" "mp4" -> "video/mp4" "avi" -> "video/avi" "mkv" -> "video/mkv" "webm" -> "video/webm" else -> null } }
可选:合并MediaStore结果与手动遍历结果
如果需要同时获取系统收录的媒体文件和隐藏目录的文件,可以将现有Cursor查询到的文件列表与手动遍历得到的列表合并,通过文件路径去重后使用。
注意事项
- 手动遍历存储耗时较长,务必在后台线程执行,避免阻塞主线程。
- API 30+必须获取
MANAGE_EXTERNAL_STORAGE权限才能完整遍历外部存储,否则会被限制访问部分目录。 - 不要依赖MediaStore获取隐藏目录文件,系统扫描器不会处理这类目录。
内容的提问来源于stack exchange,提问作者user18065631
相关产品推荐
相关产品推荐

