我无法从其他活动返回的uri获取文件路径。
我找到了很多关于如何将Uri转换为绝对文件路径like this one的解决方案,但它总是依赖于给定链接中的音频等内容类型。
我的应用程序提供了一个活动来发送任何类型的文件..表示我将意图过滤器设置为
mimetype */*
但是当我进入文件浏览器并从相机照片文件夹中选择一个图像文件时,我得到的路径就像/ external / images / media / 288但是如果我选择一个音乐文件,我会像外部/音频/媒体/那样得到Uri 1336
但另一方面,如果我选择非媒体文件类型(ex.pdf或zip),那么我已经在Uri中获得了绝对路径
所以你可以看到它不知道Uri会有什么路径取决于我选择用我的应用程序发送的文件。
一种可能的解决方案是对所有类型的媒体进行游标查询,例如音频视频和图像,如果它们返回null,则检查Uri.getPath(),但我认为这是一种非常糟糕的做法或效率低下的方法!
有没有办法从任何Uri获取绝对路径(给定文件存在)而不检查每种类型的uri?
答案 0 :(得分:1)
我无法从其他活动返回的uri获取文件路径。
没有"文件路径"与Uri
相关联。 Uri
指向数据源,可能是也可能不是文件,更不用说您可以直接访问的文件。
您可以通过InputStream
上的Uri
来获取与openInputStream()
相关联的数据的ContentResolver
。
有没有办法从任何Uri获得绝对路径
没有任何可靠的方式。请按照预期的方式使用Uri
。