处理文件格式(来自 Camera 的文件路径,来自 Gallery 的 Uris)

Dealing with file formats (filepaths from Camera, Uris from Gallery)

所以在创建我的应用程序的照片部分时,用户可以拍照或从图库中选择照片,我遇到了一些奇怪的问题。

"take picture" 实现依赖于 getExternalCacheDir() 给出的系统缓存目录的绝对文件路径,因此使用描述图像文件位置的字符串来操作这些文件。

然而,当我尝试从图库中获取图片时,使用 Intent 获取 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,相应的图像采用 Uri.

的形式

为了保持一致性,我尝试通过执行 .getPath() 将此 Uri 转换为路径,但这只给了我包含图像的文件夹,而不是实际图像的完整路径。

如何从图库 Intent 中获取给我的图像的完整路径,以便我可以纯粹根据文件路径工作?

How do I get the full path to the image given to me from the gallery Intent

你不知道。

不要求 MediaStore 仅索引您可以直接访问文件系统的图像。特别是,对于 运行 Android 4.4+ 且具有可移动媒体的数亿设备,MediaStore 可以很容易地在其索引图像中包含您无法从文件系统访问的图像,因为您没有对可移动存储的任意访问权限。

根据您对这些图像的处理,使用 an image-loading library or just use ContentResolver and methods like openInputStream() to read in the content。作为奖励,openInputStream() 适用于 file:content: Uri 值,因此您不一定需要分别处理两种数据源类型。