从 Android 中的 Uri 获取文件名

Get file name from Uri in Android

我使用以下代码构建了一个 Uri

final Uri fileUri = DocumentsContract.buildChildDocumentsUriUsingTree(rootUri, docId);

包含值:

content://com.android.externalstorage.documents/tree/primary%Sample/document/primary%Sample%2FMedia%2F.Hide%2FScreenshot_1615959401.png/children

下面是我访问文件名称和 MIME 类型的代码:

ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(fileUri, new String[]{DocumentsContract.Document.COLUMN_DOCUMENT_ID, DocumentsContract.Document.COLUMN_DISPLAY_NAME, DocumentsContract.Document.COLUMN_MIME_TYPE}, null, null, null);
try {
        if (cursor != null && cursor.moveToFirst()) 
        {
          //Here cursor.moveToFirst() returns false
        }
    } catch(Exception e)
        {
           e.printStackTrace();
        }

我想从 Uri 上面访问像 Screenshot_1615959401.png 这样的文件名,像 image/png 这样的 mime 类型文件,但是 cursor.moveToFirst() returns 0.为什么Uri有效也找不到记录。因为我尝试使用这个 Uri 来加载图像,而 ImageView 正在使用上面的 Uri 正确显示图像。

任何帮助将不胜感激,因为我花了很多时间谷歌搜索和阅读 SO 但没有找到任何解决方案或根本原因。

Below is my code to access the name and mime type of file:

那个Uri不是一个文档。它用于文档树的子文档名册,其中树由 docId 标识。 childDocumentsUri是你调用的方法名的核心。

Why record is not found even Uri is valid

它对您想要的操作无效。

如果您希望为文档构建 Uri,给定文档 ID 和树,use buildDocumentUriUsingTree(),而不是 buildChildDocumentsUriUsingTree()