2014-01-24 36 views
0

我无法从其他活动返回的uri获取文件路径。如何从变量类型获得绝对路径Uri

我发现许多解决方案如何将Uri转换为绝对文件路径like this one,但它始终依赖于给定链接中的音频等内容类型。

我的应用程序提供了一个活动来发送任何类型的文件..这表示我的意图过滤器设置为

mimetype */* 

但是当我走在文件浏览器,并从相机中的照片文件夹中选择一个图像文件我得到像/ external/images/media/288这样的路径,但是如果我选择一个音乐文件,我会得到像外部/音频/媒体/ 1336

但另一方面,如果我选择非媒体文件类型pdf或zip)然后我得到已经在Uri的绝对路径

因此,哟你可以看到它不知道Uri有什么路径取决于我选择用我的应用程序发送的文件。

一个可能的解决方案是对所有类型的媒体进行光标查询,例如音频视频和图像,如果它们返回null,然后检查Uri.getPath(),但我认为这是非常糟糕的做法或效率低下的方式!

有没有办法从任何Uri获得绝对路径(给定文件存在)而不检查每种类型的uri?

+0

http://developer.android.com/guide/topics/providers/document-provider.html#open有两个例子如何获取任何uri资源的内容。请参阅输入流和位图示例。 – zapl

回答

1

我无法从其他活动返回的uri获取文件路径。

没有必要有与Uri关联的“文件路径”。 A Uri指向数据源,可能是也可能不是文件,更不用说可以直接访问的文件。

您可以通过调用openInputStream()ContentResolver上获得与Uri关联的数据的InputStream

有什么办法可以从任何乌里

获得绝对路径未在任何一种可靠的方式的。请按照预期的方式使用Uri

+0

如果我知道它始终是一个文件,但我需要从其他活动获取路径? – Allahjane

相关问题