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

如何在Android模拟器中获取SD卡内文件夹路径并访问内容

解决Android模拟器无法访问SD卡中BiometricImages文件夹内容的问题

核心原因

模拟器的外部存储挂载逻辑、权限机制和真实设备存在差异,尤其是Android 10及以上的分区存储特性,会限制APP直接访问非自身创建的外部目录。另外你用的getExternalFilesDir()是获取APP私有外部存储目录,和手动在SD卡根目录创建的BiometricImages并非同一路径。

具体解决步骤

1. 确认模拟器SD卡实际路径

打开模拟器文件管理器,找到BiometricImages文件夹,查看完整路径。通常模拟器外部存储挂载在/storage/emulated/0/,部分模拟器可能映射到/storage/sdcard0/,需以实际路径为准。

2. 适配分区存储(Android 10+)

若APP目标SDK为30及以上,默认启用分区存储,无法直接访问外部根目录自定义文件夹,可二选一处理:

  • 用媒体库API查询图片:通过MediaStore指定目录查询jpg文件:
val projection = arrayOf(MediaStore.Images.Media.DATA)
val selection = "${MediaStore.Images.Media.RELATIVE_PATH} LIKE ?"
val selectionArgs = arrayOf("%BiometricImages%")
val cursor = contentResolver.query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    selection,
    selectionArgs,
    null
)
val imagePaths = mutableListOf<String>()
cursor?.use {
    while (it.moveToNext()) {
        val path = it.getString(it.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))
        imagePaths.add(path)
    }
}
  • 临时关闭分区存储(仅适用于目标SDK 29-30,Android 11+部分场景失效):在AndroidManifest.xml中添加配置:
<application
    ...
    android:requestLegacyExternalStorage="true">
    ...
</application>

3. 检查权限配置

确保已申请并授予外部存储访问权限:

  • 在AndroidManifest.xml声明权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Android 13+ 需单独申请图片权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
  • 代码中动态申请权限(Android 6.0+):
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1001)
}

4. 修正路径获取逻辑

避免硬拼接路径,改用安全的文件对象方式获取目录:

val biometricDir = File(Environment.getExternalStorageDirectory(), "BiometricImages")
if (biometricDir.exists()) {
    val images = biometricDir.listFiles { file ->
        file.extension.equals("jpg", ignoreCase = true)
    }?.toList() ?: emptyList()
}

5. 模拟器特殊设置

  • 重启模拟器,确保SD卡挂载状态正常;
  • 检查模拟器是否开启“模拟SD卡”功能,部分模拟器需手动配置SD卡容量才能正常使用外部存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:36