当前位置: 首页 > 知识库问答 >
问题:

从URI获取真实路径,Android KitKat新存储访问框架[副本]

何玺
2023-03-14

在Android4.4(KitKat)的新图库访问之前,我通过以下方法在SD卡上获得了我的真实路径:

public String getPath(Uri uri) {
   String[] projection = { MediaStore.Images.Media.DATA };
   Cursor cursor = managedQuery(uri, projection, null, null, null);
   startManagingCursor(cursor);
   int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
   cursor.moveToFirst();
 return cursor.getString(column_index);
}

现在,intent.action_get_content返回不同的数据:

content://media/external/images/media/62
content://com.android.providers.media.documents/document/image:62

我怎样才能获得SD卡上的真实路径?

共有1个答案

穆商震
2023-03-14

注意:这个答案解决了问题的一部分。对于完整的解决方案(以库的形式),看看Paul Burke的答案。

您可以使用URI获取文档ID,然后查询mediastore.images.media.external_content_urimediastore.images.media.internal_content_uri(取决于SD卡的情况)。

获取文档ID:

// Will return "image:x*"
String wholeID = DocumentsContract.getDocumentId(uriThatYouCurrentlyHave);

// Split at colon, use second item in the array
String id = wholeID.split(":")[1];

String[] column = { MediaStore.Images.Media.DATA };     

// where id is equal to             
String sel = MediaStore.Images.Media._ID + "=?";

Cursor cursor = getContentResolver().
                          query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                          column, sel, new String[]{ id }, null);

String filePath = "";

int columnIndex = cursor.getColumnIndex(column[0]);

if (cursor.moveToFirst()) {
    filePath = cursor.getString(columnIndex);
}   

cursor.close();

参考:我无法找到这个解决方案的文章。我想请原海报投稿这里。今晚会多看一些。

 类似资料:
  • 让我分享到目前为止我所学到的,并提出我的问题。如果希望获取文件夹的Uri并对其进行操作,则应使用和获取访问文件夹的Uri,并为该Uri设置W/R权限。 授予onActivityResult的持久权限: 如果选择设备的主文件夹: 如果使用DocumentFile类获取主文件夹的路径 返回:file:///storage/emulated/0 我的第一个问题是如何使用DocumentFile类获得包含

  • 问题内容: 我的Android应用程序想要在Google云端硬盘中创建一个文件夹,并从设备上的云端硬盘应用程序获取uri。 它发送一个意图,您可以看到以下代码: 然后获取返回的数据,您可以看到以下代码: 我使用了在互联网上发现的一种模仿类型,它似乎是一种标准类型。使用“ application / vnd.google- apps.folder”时会发出相同的错误。目标是要有一个文档树,但是在lo

  • 我正在开发一款。我将启动意图的转换为字符串,它会给我。但我需要找到真正的路径。 例如:

  • 我发现不推荐使用,所以我想用另一种方法获取图像的真实路径。 这里是我获得图像的uri和标题的新方法,但我不知道如何获得真实的路径。 打印uri、标题、路径: Photouri:内容://Media/External/Images/Media/1605 标题:IMG_20191223143418 但我只想要这样:/storage/emulated/0/dcim/1733/img_2019122314

  • 我在我的应用程序中实现了SAF(存储访问框架)。我正在三星Nexus10上运行我的应用程序。它安装了dropbox。但我无法在我的应用程序中看到dropbox。所以我的问题是: Dropbox在SAF注册吗?如果是,是否还有其他事情,我需要做在我的应用程序,使Dropbox可用作为根文件夹之一? 目前,在我的应用程序中,我看到-谷歌驱动器、图像、下载作为我的根文件夹

  • 我正在尝试在Android 8 API Level 26 emulator上运行Xamarin Android应用程序。当我试图将日志写入文件时,这是一个例外。 例外: 系统UnauthorizedAccessException:对路径“/storage/emulated/0/abc.txt”的访问被拒绝 代码: 我也给了和权限。 目标Android版本:Android8.0 API级别26 Or