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

如何获取getExternalFilesDir指定目录下的图片?现有代码返回全部图库图片

解决方法

你的代码当前查询了MediaStore中所有外部存储的图片,要只获取getExternalFilesDir(Environment.DIRECTORY_PICTURES)目录下的图片,需要通过文件路径筛选缩小查询范围,具体实现如下:

1. 核心修改点

  • 获取应用私有图片目录的完整路径
  • 在MediaStore查询时添加路径筛选条件,只保留目标目录下的图片
  • 优化Cursor遍历逻辑,避免冗余代码

2. 修改后的完整代码

public class GalleryPhotoActivity extends AppCompatActivity {
    ActivityGalleryPhotoBinding binding;
    ArrayList<Uri> imageuris = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityGalleryPhotoBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // 获取应用私有图片目录的绝对路径
        File targetDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        String targetPath = targetDir.getAbsolutePath();

        String[] projection = new String[]{
                MediaStore.Images.Media._ID,
                MediaStore.Images.Media.SIZE,
                MediaStore.Images.Media.DATE_MODIFIED,
                MediaStore.Images.Media.DATA // 添加路径字段用于筛选
        };
        // 筛选路径包含目标目录的图片
        String selection = MediaStore.Images.Media.DATA + " LIKE ?";
        String[] selectionArgs = new String[]{targetPath + "%"};
        // 可选:按修改时间倒序排列图片
        String orderby = MediaStore.Images.Media.DATE_MODIFIED + " DESC";

        Uri content_uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        Cursor cursor = getContentResolver().query(content_uri, projection, selection, selectionArgs, orderby);
        if (cursor != null) {
            // 简化Cursor遍历逻辑
            while (cursor.moveToNext()) {
                long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
                Uri image_uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
                imageuris.add(image_uri);
            }
            cursor.close(); // 关闭Cursor避免内存泄漏

            binding.rv.setLayoutManager(new GridLayoutManager(this, 3));
            RvAdapter adapter = new RvAdapter(imageuris);
            binding.rv.setAdapter(adapter);
        }
    }
}

额外说明

  • 该目录属于应用私有外部存储目录,卸载应用时会被自动删除;Android 10(API 29)及以上版本访问此目录无需申请READ_EXTERNAL_STORAGE权限
  • 若需兼容Android 9及以下版本,需在Manifest中添加READ_EXTERNAL_STORAGE权限,并完成动态权限申请

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:10:40