java - 如何从android中的文件资源管理器获取唯一路径

标签 java android uri

我想在我的应用程序中打开文件资源管理器,让用户选择一些路径并将其保存到我的数据库中。用户选择路径后,我想获取 Uri 并将其保存到数据库中。此 Uri 对于所有路径都必须是唯一的。 问题是用户可以通过两种方式选择一条路径,而我将为同一路径获得 2 个 Uri。

我使用 +21 作为最小 API。

我正在使用以下代码打开文件资源管理器。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    startActivityForResult(Intent.createChooser(intent, "Choose directory"), 78);

这是我的下载文件夹的结果。 (我手机没有外存但是有外存路径)

我正在使用 uri.toString() 记录这个

content://com.android.externalstorage.documents/tree/primary%3A content://com.android.providers.downloads.documents/tree/downloads

对于第一个,我在文件资源管理器中打开抽屉导航并选择下载。 对于第二个,我在文件资源管理器中打开抽屉导航并选择我的内部存储,然后选择下载文件夹。

它们都是我存储中的同一个文件夹,但它有 2 个不同的路径。 我想为两者获得相同的路径。

最佳答案

那是不可能的。

用户可以安装任意数量的文档提供程序。这些可以使用任何 Uri 结构发布文档树,并且它们可以指向文档提供者想要的任何数据。如您所知,对于给定位置,给定用户可能有 1,000 个不同的 Uri 值。 ACTION_OPEN_DOCUMENT_TREE 可以返回它们中的任何一个,具体取决于用户在存储访问框架 UI 中选择的内容。您甚至没有可靠的方法来确定两个 Uri 值指向同一位置。

关于java - 如何从android中的文件资源管理器获取唯一路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921919/

相关文章:

javascript - 如何使用jsoup在android中用js解析网页内容

Java 正则表达式 : Split by both brackets

Java boolean 数组,只有一个元素

javascript - 将滚动条隐藏在固定定位的 div 后面

c# - 使用可能有或没有尾随/的 Uri 字符串

url - ffmpeg 流式传输 rtsp 与 uri (url) 中的参数

android - 从内容中获取资源id ://settings/system/ringtone?

java - 如何更改 XML 以让 hibernate 定义数据源

java - 为什么不在 Android 控制台上显示 firebase 事件?

Java方法调用格式