ContentResolver - 如何从Uri获取文件名

Poi*_*ull 13 android android-contentresolver

我用Intent ACTION_GET_CONTENT调用startActivityForResult.一些应用程序使用此Uri返回数据:

内容://媒体/外部/图像/媒体/ 18122

我不知道它是图像,视频还是一些自定义内容.如何使用ContentResolver从此Uri获取实际文件名或内容标题?

Nav*_*arr 16

@ Durairaj的答案特定于获取文件的路径.如果您要搜索的是文件的实际名称(因为您应该使用内容解析,此时您可能会获得大量内容:// URI),您需要执行以下操作:

(代码从Durairaj的答案中复制并修改)

        String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
        Cursor metaCursor = cr.query(uri, projection, null, null, null);
        if (metaCursor != null) {
            try {
                if (metaCursor.moveToFirst()) {
                    fileName = metaCursor.getString(0);
                }
            } finally {
                metaCursor.close();
            }
        }
Run Code Online (Sandbox Code Playgroud)

这里要注意的主要部分是我们正在使用MediaStore.MediaColumns.DISPLAY_NAME,它返回内容的实际名称.你也可以试试MediaStore.MediaColumns.TITLE,因为我不确定它的区别.


Dur*_*amy 15

您可以通过修改投影从此代码或任何其他字段获取文件名

String[] projection = {MediaStore.MediaColumns.DATA};

ContentResolver cr = getApplicationContext().getContentResolver();
Cursor metaCursor = cr.query(uri, projection, null, null, null);
if (metaCursor != null) {
    try {
        if (metaCursor.moveToFirst()) {
            path = metaCursor.getString(0);
        }
    } finally {
        metaCursor.close();
    }
}
return path;
Run Code Online (Sandbox Code Playgroud)

  • 如果我不知道投影?例如,在我的应用程序中获取可以保存任何文件的意图 (3认同)

coo*_*dev 12

要获取文件名,您可以使用新的DocumentFile格式。

DocumentFile documentFile = DocumentFile.fromSingleUri(this, data.getdata());
String fileName = documentFile.getName();
Run Code Online (Sandbox Code Playgroud)