如何将绝对路径字符串转换为树 Uri 格式的目录

How to convert an absolute path String to a directory in tree Uri format

方法 Uri.parse 生成的 Uri 不是 Android tree Uri 如果我尝试解析 "String path=/storage/emulated/0/Somefolder/".

类型的字符串路径

出于这个原因,如果我尝试获取 DocumemtFile 类似

的列表
String path="/storage/emulated/0/Somefolder/"
DocumentFiles[] fileslist=DocumentFile.fromTreeUri(this, Uri.parse(path)).listFiles();

我收到 无效 URI 错误。

如果我尝试使用 DocumentFile.fromSingleUri 也无法正常工作。

如何从字符串路径中正确获取 tree Uri

我已经找到如何使用 action Intent 获取 treeuri,但我需要以编程方式执行此操作,而不需要强制用户手动选择文件夹。

How Could I get the tree Uri correctly from a String path?

这是不可能的,抱歉。

为了使 DocumentFile 指向文件系统路径,请使用 fromFile()。请记住:

  • 您需要在清单中的 <application> 元素上使用 android:requestLegacyExternalStorage="true" 才能读取 Android 10+

    上的任意文件系统路径
  • 一旦你的 targetSdkVersion 达到 30,你将失去对 Android 11+ 上的任意文件系统路径(尽管有该属性)的写入权限,明年某个时候

如果用户曾经选择 /storage/emulated/0 和 ACTION_OPEN_DOCUMENT_TREE,那么您可以自己很容易地为 /storage/emulated/0/myfolder/mysubfolder/myfile 这样的路径构造 uri。并使用 uri 进行完全访问。

有点像getRealPathFromUri().

这样的函数的反转

请记住,这些函数是被诅咒的!