如何从Uri获取完整路径, 就像/ Removable / MicroSD /
一样我使用以下代码让用户在Lollipop上选择SD卡以获得对SD卡的写入权限。
startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);
使用以下代码
创建一个onActivityResult方法来处理结果if (resultCode == RESULT_OK)
{
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
WriteDebugData(pickedDir.getName());
}
然而,它将目录作为 MicroSD 返回,我需要的是完整路径名 /可移动/ MicroSD /
PS:我也想要所有指向Uri的链接,例如 /可移动/ MicroSD / 和 / Storage / MicroSD / 两条路径均指外置MicroSD卡,如何全部获取?
答案 0 :(得分:3)
如何从Uri获取完整路径,就像/ Removable / MicroSD /
一样
你没有。
首先,并不要求Uri
实际上指向物理存储。例如,通过ACTION_OPEN_DOCUMENT_TREE
(例如,Google Drive,Dropbox)访问的云服务可能会返回一个Uri
,它在内部用作查找键,用于包含列表本地缓存的数据库现有文件。
其次,Uri
,即使它指向物理存储,也不要求您可以访问物理存储上的位置。特别是,在具有存储访问框架(例如ACTION_OPEN_DOCUMENT_TREE
)的任何设备上,您无权访问removable storage。或者,对于云服务,物理存储可能是internal storage,对于他们的应用是私有的。
第三,Uri
,即使它指向您可以访问的物理存储,也不要求将该位置数据实际烘焙到Uri
本身。 Uri
可以是content://some.authority.string/asdfklasj2348dfljaslkdfj
。实际上,我会建议任何创建ContentProvider
的开发人员,尤其是支持存储访问框架的开发人员,以确保Uri
值尽可能不透明。
IOW,a Uri
is not a reference to a local file,不只是Web服务器的URL是对本地文件的引用。