如果我尝试解析"String path=/storage/emulated/0/Somefolder/"
类型的字符串路径,该方法Uri.parse
生成一个不是 Android树Uri 的Uri
。出于这个原因,如果我尝试DocumemtFile
列表上类似的东西
String path="/storage/emulated/0/Somefolder/"
DocumentFiles[] fileslist=DocumentFile.fromTreeUri(this, Uri.parse(path)).listFiles();
我收到无效的 URI错误。
相反,如果我尝试使用DocumentFile.fromSingleUri
也无法正常工作。
如何从字符串路径中正确获取树Uri?
我已经找到了如何使用操作意图获取treeuri,但我需要以编程方式执行此操作,而无需强迫用户手动选择文件夹。
如何从字符串路径中正确获取树 Uri?
那是不可能的,对不起。
为了使DocumentFile
指向文件系统路径,请使用fromFile()
。请记住:
-
您需要
android:requestLegacyExternalStorage="true"
清单中的<application>
元素才能对 Android 10+ 上的任意文件系统路径具有读取访问权限 -
一旦您的
targetSdkVersion
达到 30,您将失去对 Android 11+ 上任意文件系统路径(尽管有该属性(的写入访问权限,明年某个时候
如果用户曾经用ACTION_OPEN_DOCUMENT_TREE选择了/storage/emulated/0,那么你自己可以很容易地为像/storage/emulated/0/myfolder/mysubfolder/myfile
这样的路径构造 uri。并使用 uri 进行完全访问。
这与getRealPathFromUri()
等功能有点相反。
请记住,这些功能被诅咒了!