获取主存储和辅助存储上 DCIM 文件夹的路径

2024-02-28

我正在编写一个应用程序,该应用程序应该上传相机拍摄的照片,这些照片存储在内存和 SD 卡上的 DCIM/Camera 文件夹中。

这意味着每次上传之前都必须检查所有可用存储中是否存在任何图像。

I use Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)访问主存储,可以是 SD 卡或内部存储器(取决于设备)。

来自文档:

注意:不要对这里的“外部”一词感到困惑。该目录可以更好地被视为媒体/共享存储。它是一个可以保存相对大量数据并且在所有应用程序之间共享的文件系统(不强制执行权限)。传统上,这是一张 SD 卡,但它也可以实现为设备中的内置存储,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。

我的问题是,如何访问辅助存储来检查 DCIM/Camera 文件夹中是否存在图像,而无需对路径进行硬编码,这种方法效果不佳,因为 SD 卡可能会在不同的路径中进行模拟。


尝试使用此代码来选择上次使用的 DCIM/Camera 文件夹。

String getDCIMCamera() {
    try {
        String[] projection = new String[]{
                MediaStore.Images.ImageColumns._ID,
                MediaStore.Images.ImageColumns.DATA,
                MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
                MediaStore.Images.ImageColumns.DATE_TAKEN,
                MediaStore.Images.ImageColumns.MIME_TYPE};

        Cursor cursor = getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection,
                null,
                null,
                MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
        if (cursor != null) {
            cursor.moveToFirst();
            do {
                String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                if (path.contains("/DCIM/")) {
                    File file = new File(path);
                    path = file.getParent();
                    cursor.close();
                    return path;
                }
            } while (cursor.moveToNext());
            cursor.close();
        }
    }
    catch (Exception e) {
    }
    return "";
}

另请参阅@Pedram 提示:https://stackoverflow.com/a/24189813/966789 https://stackoverflow.com/a/24189813/966789

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取主存储和辅助存储上 DCIM 文件夹的路径 的相关文章

随机推荐