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

使用MediaStore API查询USB OTG文件失败,是否支持该操作?

问题描述

以下代码可正常打印external_primary及SD卡中的文件名:

val projection = arrayOf( MediaStore.Files.FileColumns.DISPLAY_NAME )
val selection  = MediaStore.Files.FileColumns.RELATIVE_PATH + " = '/'"

val mediaStoreVolumes = MediaStore.getExternalVolumeNames(requireActivity())
mediaStoreVolumes.forEach { volume ->
    val uri    = MediaStore.Files.getContentUri(volume)
    val cursor = cr.query(uri, projection, selection, null, null)
    if (cursor != null) {
        while (cursor.moveToNext()) {
            Log.e("Volume: "+volume, "File: "+ cursor.getString(0))
        }
        cursor.close()
    }
}

但查询USB OTG时触发如下异常:

E  FATAL EXCEPTION: main
Process: com.starsolutions.starfilemanager, PID: 10093
java.lang.IllegalArgumentException: Volume a80d-7c6d not found

其中卷名a80d-7c6d是由MediaStore.getExternalVolumeNames()方法返回的,请问是否可以使用MediaStore API列出USB OTG驱动器中的文件?

解答

MediaStore API不支持直接访问USB OTG存储设备。

虽然MediaStore.getExternalVolumeNames()会返回USB OTG的卷标识,但这仅表示系统已识别到该存储设备,并不意味着MediaStore具备对其进行文件查询的权限或支持能力。MediaStore的核心作用是管理设备内部存储、内置SD卡中的媒体文件,USB OTG这类可移动外部存储不在其设计的支持范围内。

如果需要访问USB OTG中的文件,建议使用存储访问框架(SAF):通过Intent.ACTION_OPEN_DOCUMENT_TREE唤起系统选择器,让用户手动选择USB OTG的存储目录,之后借助DocumentFile类来遍历、操作其中的文件。

内容的提问来源于stack exchange,提问作者Muhammed naseef Koppilakkal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:10:31