首页 > 解决方案 > Android:从 SD 卡中文件的 Uri 获取文件路径

问题描述

我们正在尝试获取保存在 SD 卡中的文件的路径,以传递给实用程序。但是,当我们使用 URI 打开游标时,只获取了两列,缺少路径(_data 列)。请让我知道如何获取路径。该查询适用于内部存储中的任何文件。

方案是“内容”。

代码片段

cursor = context.getContentResolver().query(uri, null, null, null, null);
if (null != cursor && cursor.moveToFirst())
{
    int testcolCount = cursor.getColumnCount();
    for (int i = 0; i < testcolCount; i++)
    {
        String colName = cursor.getColumnName(i);
        String colValue = cursor.getString(i);
        System.out.println("" + i + ": " + colName + ":" + colValue + "\n");
    }

    //This prints only two columns, _display_name and _size
}

标签: androidsd-cardandroid-external-storage

解决方案


根本不要尝试获取路径,Android 10 及更高版本的应用程序私有目录之外的文件路径是无用的,因为您无权访问它们。

https://developer.android.com/training/data-storage#scoped-storage

使用contentResolver获取 aFileDescriptor以传递给实用程序

注意来自https://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html#DATA

此常量在 API 级别 29 中已弃用。应用程序可能没有文件系统权限来直接访问此路径。应用程序不应尝试直接打开此路径,而应使用 ContentResolver#openFileDescriptor(Uri, String) 来获得访问权限。


推荐阅读