在Android中获取Uri的完整路径名

时间:2015-08-16 13:22:15

标签: java android android-5.0-lollipop android-5.1.1-lollipop

如何从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卡,如何全部获取?

1 个答案:

答案 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是对本地文件的引用。